2016-04-09 12 views
2

Wie kann logische um Faktoren (oder Zeichenfolgen) in data.frame recode?logisch zu Faktoren (oder Strings) in data.frame

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" 

Meine Ergebnisse:

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

Was ich will:

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

Was ich versucht (in dplyr Kette):

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

im Grunde das gleiche: 'missing_data $ col2 <- Faktor (ifelse (fehlende_Data $ col2," bekannt "," unbekannt "))' aber ich bevorzuge die Alternativen von Richard Lindgren und Procrastinatus Maximus –

Antwort

2

Neben der offensichtlichen Methode, wie durch lindgren richard gezeigt, könnte man dies auch in der dplyr Kette. Sie können einen numerischen Index aus den Logicals [col2 + 1] schaffen und dass die Pegel c('unknown','known') zuweisen verwenden:

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

oder mit ifelse:

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

, die beide geben:

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

Wenn Sie Möchten Sie einen Faktor als Ergebnis, können Sie es in factor: factor(c('unknown','known')[col2 + 1]) oder factor(ifelse(col2,'known','unknown')) wickeln.


Wenn Sie die Methode zu übernehmen wollen, wie durch richard lindgren im dplyr -Kette gezeigt, sind Sie in der ungroup ersten haben:

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

, die Ihnen die gewünschtes Ergebnis auch.

4

Dies sollte man es tun.

missing_data$col2 <- factor(missing_data$col2, labels=c("unknown", "known")) 
Verwandte Themen