将值分配给从旧变量获得的新变量

时间:2019-06-05 13:01:13

标签: r dplyr sum

我想为从旧变量获得的新变量分配一个特定的值。就我而言,我有此数据表。

 $ date     : Date, format: "2018-01-05" "2018-01-06" "2018-01-07" ...
 $ price    : num  100 110 120 ...
 $ Sentiment: int  -2 3 0 ...

我想添加一个名为“ tot_sentiment”的新变量,如果Sentiment变量的值为负,则分配“负”值;如果Sentiment变量的值为正,则为“正”;如果Sentiment变量的值为正,则分配“中性”。情感变量的值为零。

预期输出:

 $ date     : Date, format: "2018-01-05" "2018-01-06" "2018-01-07" ...
 $ price    : num  100 110 120 ...
 $ Sentiment: int  -2 3 0 ...
 $ tot_sentiment: char  negative positive neutral ...

我尝试了以下代码:

new_dt<- dt %>% mutate(tot_sentiment = sum(Sentiment)....blablabla.....)

2 个答案:

答案 0 :(得分:1)

可以使用ifelse中的case_whendplyr完成此操作。但是,您可以直接使用sign并将值子集

df$tot_sentiment <- c("negative", "neutral", "positive")[sign(df$b) + 2]

df
#  a  b tot_sentiment
#1 a -2      negative
#2 b  0       neutral
#3 c  1      positive
#4 d  2      positive
#5 e -5      negative

数据

df <- data.frame(a = letters[1:5], b = c(-2, 0, 1, 2, -5))

答案 1 :(得分:1)

我们可以使用factor来更改sign ed列上的级别

df$tot_sentiment <-  factor(sign(df$b), levels = -1:1, 
       labels = c("negative", "neutral", "positive"))
df
#  a  b tot_sentiment
#1 a -2      negative
#2 b  0       neutral
#3 c  1      positive
#4 d  2      positive
#5 e -5      negative

数据

df <- data.frame(a = letters[1:5], b = c(-2, 0, 1, 2, -5))