簡體   English   中英

邏輯於data.frame中的因子(或字符串)

[英]logical to factors (or strings) in data.frame

如何在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" 

我的結果:

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

我想要的是:

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

我嘗試了什么(在dplyr鏈中):

mutate(col2 = as.factor(col2))

這個人應該這樣做。

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

除了richard lindgren所示的顯而易見的方法之外 ,您還可以在dplyr鏈中執行此操作 您可以從邏輯[col2 + 1]創建數字索引,並使用它來分配級別c('unknown','known')

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

或者與ifelse

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

如果你想要一個因子作為結果,你可以將它包裝在factorfactor(c('unknown','known')[col2 + 1])factor(ifelse(col2,'known','unknown'))


如果要合並的方法,如通過在dplyrα理查德·林格倫 ,你將不得不ungroup第一:

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

這也會給你帶來理想的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM