2014-12-28 18 views
12

với str(data) tôi nhận được head của các cấp (1-2 giá trị)yếu tố của một data.frame

fac1: Factor w/ 2 levels ... : 
fac2: Factor w/ 5 levels ... : 
fac3: Factor w/ 20 levels ... : 
val: num ... 

với dplyr::glimpse(data) tôi nhận được nhiều giá trị, nhưng không có infos về số/giá trị của yếu tố -quần áo. Có cách nào tự động để có được tất cả các thông tin mức độ của tất cả các vars yếu tố trong một data.frame? Một hình thức ngắn với thông tin nhiều hơn cho

levels(data$fac1) 
levels(data$fac2) 
levels(data$fac3) 

hay chính xác hơn là một phiên bản thanh lịch cho một cái gì đó giống như

for (n in names(data)) 
    if (is.factor(data[[n]])) { 
    print(n) 
    print(levels(data[[n]])) 
    } 

thx Christof

Trả lời

9

Dưới đây là một số tùy chọn. Chúng tôi vòng qua 'dữ liệu' với sapply và nhận được levels của mỗi cột (giả định rằng tất cả các cột được factor lớp)

sapply(data, levels) 

Hoặc nếu chúng ta cần phải ống (%>%) nó, điều này có thể được thực hiện như

library(dplyr) 
data %>% 
    sapply(levels) 

Hoặc tùy chọn khác là summarise_each từ dplyr nơi mà chúng tôi xác định levels trong funs.

data %>% 
     summarise_each(funs(list(levels(.)))) 
+3

Làm thế nào để chúng ta có được chiều dài của tất cả những mức – BigDataScientist

2

Phương pháp đơn giản hơn là sử dụng gói sqldf và sử dụng câu lệnh riêng biệt được chọn. Điều này làm cho nó dễ dàng hơn để tự động nhận được tên của các mức độ yếu tố và sau đó chỉ định như các cấp cho các cột/biến khác.

Generic đoạn mã là:

library(sqldf) 
    array_name = sqldf("select DISTINCT *colname1* as '*column_title*' from *table_name*") 

Mẫu mã sử dụng iris tập dữ liệu:

df1 = iris 
factor1 <- sqldf("select distinct Species as 'flower_type' from df1") 
factor1 ## to print the names of factors 

Output:

flower_type 
1  setosa 
2 versicolor 
3 virginica 
+0

Nếu bạn thụt lề mỗi dòng mã bằng 4 dấu cách, nó sẽ tự định dạng chính xác. –

Các vấn đề liên quan