如何在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))
答案 0 :(得分:5)
这个人应该这样做。
missing_data$col2 <- factor(missing_data$col2, labels=c("unknown", "known"))
答案 1 :(得分:3)
除了 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
如果您想要一个因子作为结果,可以将其包含在factor
:factor(c('unknown','known')[col2 + 1])
或factor(ifelse(col2,'known','unknown'))
中。
如果您想在 dplyr -chain中加入 richard lindgren 所示的方法,则必须{{1}首先:
ungroup
也会给你想要的结果。