我有一些数据。我想添加一列,但不是常规方式。
data <- data.frame(month_num = 1:12, month_name = month.abb)
data
month_num month_name
1 1 Jan
2 2 Feb
3 3 Mar
4 4 Apr
5 5 May
6 6 Jun
7 7 Jul
8 8 Aug
9 9 Sep
10 10 Oct
11 11 Nov
12 12 Dec
现在,我想为此数据添加第三列。例如,我想将以下向量作为data
中的列:
sentiment = c(rep("cold", 3), rep("hot", 6), rep("cold", 3)
我通常会做的(在baseR中)是以下之一:
使用$
data$sentiment <- sentiment
通过列索引创建添加
data[,3] <- sentiment
在初始创建中添加
data.frame(month_num = 1:12, month_name = month.abb, sentiment = sentiment)
是的,data.table
在其引用语义中也做得很好。
data <- data.table(month_num = 1:12, month_name = month.abb)
data[,`:=`(sentiment = sentiment)]
data
month_num month_name sentiment
1: 1 Jan cold
2: 2 Feb cold
3: 3 Mar cold
4: 4 Apr hot
5: 5 May hot
6: 6 Jun hot
7: 7 Jul hot
8: 8 Aug hot
9: 9 Sep hot
10: 10 Oct cold
11: 11 Nov cold
12: 12 Dec cold
但是,我不想以这种方式添加它。我想使用dplyr相关函数来完成这项任务。 dplyr
中是否有任何函数可以让我执行列创建任务?
注意: mutate()
无效! (或者我现在知道的。)
data%>%
mutate(sentiment = sentiment)
month_num month_name V3 sentiment
1 1 Jan cold cold
2 2 Feb cold cold
3 3 Mar cold cold
4 4 Apr hot hot
5 5 May hot hot
6 6 Jun hot hot
7 7 Jul hot hot
8 8 Aug hot hot
9 9 Sep hot hot
10 10 Oct cold cold
11 11 Nov cold cold
12 12 Dec cold cold
正如您所看到的那样,该列是重复的,我不确定为什么会发生这种情况。也许它与sentiment
中唯一值的数量有关?
总而言之,有没有办法在dplyr中使用mutate()
或其他相关功能来实现这一目标?
答案 0 :(得分:1)
我所知道的最简单的方法是使用函数case_when
:
data <- data.frame(month_num = 1:12, month_name = month.abb)
data
sentiment = c(rep("cold", 3), rep("hot", 6), rep("cold", 3)
data <- data %>%
mutate(sentiment=case_when(
month_num<=3 | month_num>=10 ~ "cold",
month_num>=4 & month_num<=9 ~ "hot"
))