data.frame

时间:2016-04-09 07:20:28

标签: r

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

2 个答案:

答案 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

如果您想要一个因子作为结果,可以将其包含在factorfactor(c('unknown','known')[col2 + 1])factor(ifelse(col2,'known','unknown'))中。

如果您想在 dplyr -chain中加入 richard lindgren 所示的方法,则必须{{1}首先:

ungroup

也会给你想要的结果。