2016-04-09 18 views
2

Data.frame'deki faktörler (veya dizeler) için mantıksal olarak nasıl yeniden kodlanabilir?data.frame içindeki faktörler (veya dizeler) için mantıksal

data <- data.frame(year = c(2015, 2015, 2016, 2016), 
       column2 = c(4, NA, 9, 1)) 


library (dplyr) 

missing_data <- data %>% 
       count(year, complete.cases(column2)) 

names(missing_data)[2] = "col2" 

Benim sonuçları:

year col2  n 
(dbl) (lgl) (int) 
2015 FALSE  1 
2015 TRUE  1 
2016 TRUE  2 

Benim istediğim:

year col2  n 
(dbl)  (int) 
2015 unknown 1 
2015 known  1 
2016 known  2 

I (dplyr zincirinde) çalıştı Ne:

mutate(col2 = as.factor(col2)) 
+0

temelde aynı: 'missing_data $ col2 <- factor (ifelse (missing_data $ col2," bilinen "," unknown ")) ama richard lindgren ve Procrastinatus Maximus'un alternatiflerini tercih ederim –

cevap

2

Richard Lindgren'in ile gösterildiği gibi, ayrıca dplyr zinciri içinde bu yapabilirdi. Sen Mantıksal bölümler [col2 + 1] bir sayısal dizin oluşturmak ve seviyeler c('unknown','known') atamak için kullanabilirsiniz: Her iki vermek

dat %>% 
    count(year, col2 = complete.cases(column2)) %>% 
    mutate(col2 = ifelse(col2,'known','unknown')) 

:

year col2  n 
    (dbl) (chr) (int) 
1 2015 unknown  1 
2 2015 known  1 
3 2016 known  2 

Eğer

dat %>% 
    count(year, col2 = complete.cases(column2)) %>% 
    mutate(col2 = c('unknown','known')[col2 + 1]) 

veya ifelse ile Sonuç olarak bir faktör istersiniz, factor: factor(c('unknown','known')[col2 + 1]) veya factor(ifelse(col2,'known','unknown'))'a sarabilirsiniz. Eğer Richard Lindgren gösterildiği gibi yöntemini dahil etmek istiyorsanız


dplyr zincirindeki, sen ungroup ilk gerekecektir:

dat %>% 
    count(year, col2 = complete.cases(column2)) %>% 
    ungroup() %>% 
    mutate(col2 = factor(col2, labels = c('unknown','known'))) 

size verecektir hangi İstenen sonuç da.

4

Bu seferki yapmalı. bariz yöntemle yanında

missing_data$col2 <- factor(missing_data$col2, labels=c("unknown", "known")) 
İlgili konular