基于多个联接的中间变异(/合并)

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

我有以下一些复杂的问题。考虑以下两个数据帧

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

我想显示我的代码,但我没有。有人可以帮我吗?

r dataframe dplyr mutate
1个回答
0
投票

一旦将数据转换为“整齐”的格式,这很容易做到,我们可以使用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可以满足您的需求。

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