将列添加为data.frame的因子

时间:2017-04-12 17:00:42

标签: r dplyr

我的data.frame d如下所示:https://i.stack.imgur.com/f1LJn.jpg

如果我执行以下操作:d <- d %>% mutate(reporter=ifelse(value_ex>0, report_ctry, partner_ctry))

新创建的变量不包含&#34; DE&#34;并且&#34; FR&#34;,但是10和16.显然,问题是变量是数字而不是因素。什么是最简单的方法告诉R新创建的变量应该是一个因素而不是数字?

2 个答案:

答案 0 :(得分:1)

正如@Jonathan Hill所提到的,条件格式返回级别而不是字符值。为as.characterreport_ctry插入partner_ctry将返回字符值。

df %>% mutate(reporter=ifelse(value_ex>0, as.character(report_ctry), as.character(partner_ctry)))
head(df2)

  report_ctry partner_ctry value_ex reporter
1          DE           FR 30.26170       DE
2          DE           FR 20.01426       DE
3          DE           FR 33.28977       DE
4          DE           FR 38.37996       DE
5          DE           FR  0.00000       FR
6          DE           FR 19.72538       DE

生成数据框如下:

df <- data.frame(report_ctry=c(rep("DE", 10), rep("FR", 10)),
                 partner_ctry = c(rep("FR",10), rep("DE", 10)),
                 value_ex = runif(20, min=0, max=50))

df$value_ex[5] <- 0

答案 1 :(得分:1)

基数R中的

ifelse在许多情况下不保留类型。使用来自dplyr的if_else,它有更多限制,但在大多数情况下都有效。 @Adam Quek使用的数据

d <- df %>%
    mutate(reporter=if_else(value_ex>0, report_ctry, partner_ctry))