如何使用dplyr将矢量添加为列(给出的示例)?

问题描述 投票:0回答:1

我有一些数据。我想添加一个列,但不是常规方式。

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中)是以下之一:

  1. 使用$添加它 data$sentiment <- sentiment
  2. 通过列索引创建添加它 data[,3] <- sentiment
  3. 在初始创建中添加它 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()或其他相关功能实现这一目标?

r dplyr
1个回答
1
投票

我知道最简单的方法是使用函数qazxsw poi:

case_when
© www.soinside.com 2019 - 2024. All rights reserved.