根据现有列将因子列添加到数据框

时间:2016-07-26 02:15:14

标签: r

我们说我有一个数据框:

word <- c("good", "great", "bad", "poor", "eh")
userid <- c(1, 2, 3, 4, 5)
d <- data.frame(userid, word)

我想添加一个数据集列sentiment,这是一个factor,取决于word是什么:

words_pos <- c("good", "great")
words_neg <- c("bad", "poor")
calculate_sentiment <- function(x) {
     if (x %in% words_pos) {
         return("pos")
     } else if (x %in% words_neg) {
         return("neg")
     }
     return(NA)
}
d$sentiment <- apply(d, 1, function(x) calculate_sentiment(x['word'])

但是,现在d$sentiment的类型为&#34;字符&#34;。如何使其成为合适水平的因素? posnegNA - 我甚至不确定NA是否应该是因素水平,因为我只是在学习R. / p>

谢谢!

2 个答案:

答案 0 :(得分:2)

这不是最简单的方法,但它是一种非常易读的方式(在我看来,最好使用抽象函数)...使用dplyr的{​​{1} }以及mutate

case_when

我把它分开了一点,所以它更清楚,但这会:

  • 选择library(dplyr) d2 <- mutate(d, sentiment = factor(case_when(word %in% words_pos ~ "pos", word %in% words_neg ~ "neg", TRUE ~ NA_character_))) glimpse(d2) #> Observations: 5 #> Variables: 3 #> $ userid <dbl> 1, 2, 3, 4, 5 #> $ word <fctr> good, great, bad, poor, eh #> $ sentiment <fctr> pos, pos, neg, neg, NA data.frame然后
  • d(更改列)“情绪”等于由
  • 定义的因素
  • 带有LHS逻辑的mutate语句,RHS上的结果(case所需的所有内容都是相同类型的。)

输出确认这是一个具有所需值的NA_character_列。

答案 1 :(得分:1)

您可以将as.factor添加到代码的最后一行。这将给出pos和neg的因素。 BTW NA不是一个因素。

d$sentiment <-as.factor(apply(d, 1, function(x) calculate_sentiment(x['word'])))