我有以下一些复杂的问题。考虑以下两个数据帧
df
ID cat month_1 month_2
1 1 A 3 1
2 1 B 2 2
3 1 C 3 4
4 2 A 3 6
5 3 D 5 2
6 3 B 2 9
> df2
ID month_number
1 1 month_1
2 1 month_2
3 2 month_1
4 2 month_2
5 3 month_1
6 3 month_2
[现在,我想执行以下操作:我想在df2
中创建一个新列,以显示特定月份与ID相关的总和。即,在第一个df中,可以看到ID为1的人在第1个月的总和为3 + 2 + 3 = 8,在第2个月的总和为7。我想将此分别更改为正确的月份。所需的输出将是(现在由人工计算)
desired_df
ID month_number grand_total
1 1 month_1 8
2 1 month_2 7
3 2 month_1 3
4 2 month_2 6
5 3 month_1 7
6 3 month_2 11
我想显示我的代码,但我没有。有人可以帮我吗?
一旦将数据转换为“整齐”的格式,这很容易做到,我们可以使用gather
来完成(在某些时候,如上文中NelsonGon所言,它将被pivot_longer代替,但这尚未在CRAN版本中进行。 )。我已经使用contains("month")
选择了包含该字符串的所有列,但是如果您将实际的月份名称用作列,则可以执行Jan:Dec
或直接键入它们以选择它们。此时,请group_by
您的标识符列,然后使用summarize
计算每个组内的总和。
df %>%
gather(key = "month_number", value = "count", contains("month")) %>%
group_by(ID, month_number) %>%
summarize(grand_total = sum(count))
没有理由加入此实例,因为collect可以满足您的需求。