我面临以下问题。我有一个数据集,我用这种方式简化了
df <- tibble(ID_1=c("a","a", "a","a", "a", "b", "b", "b", "b"), ID_2 = c("a","b", "c","d", "e", "b", "a", "c", "d"),
other= c(1, "bu", 34, 3, 5, 6, "jud", 82, 9), exchange=c(1, 13, 34, 3, 5, 6, 8, 82, 9),
goods=c("wood","wood", "wood","wood", "wood", "steel", "steel", "steel", "steel"))
df我们有不同身份的多个国家之间的交流。我想总结一下A国与B国之间、A国与C国等国之间的所有往来货物。那就是,最后,我想
ID_1 // ID_2 // Sum_exchangeAB
ID_1 // ID_3 // Sum_exchangeBC
……
ID_n // ID_n // Sumexchangenn
我怎么能在Dplyr做到这一点?我尝试了group_by (ID_1,ID_2),然后聚合。或者总结。
例如,我尝试了以下方法: dataset2 %>% group_by(ID_1,ID_2,exchange) %>%汇总(dataset2,sum_of_exchange=sum(exchange))。但是这给出了所有交换的和(也就是说,它返回一个值)。而不是两国之间交流的总和。
谢谢您的帮助,非常感谢!
发布于 2021-11-21 16:32:34
这就是你要找的吗?
df %>%
rowwise() %>%
mutate(new_id = paste0(str_sort(c(ID_1, ID_2)), collapse = '-')) %>%
group_by(new_id) %>%
summarize(exchange = sum(exchange))这意味着:
# A tibble: 8 x 2
new_id exchange
<chr> <dbl>
1 a-a 1
2 a-b 21
3 a-c 34
4 a-d 3
5 a-e 5
6 b-b 6
7 b-c 82
8 b-d 9更新: TO似乎希望将该总和附加到原始数据中,这些数据可以通过以下方式完成:
df %>%
rowwise() %>%
mutate(new_id = paste0(str_sort(c(ID_1, ID_2)), collapse = '-')) %>%
group_by(new_id) %>%
mutate(sum_exchange = sum(exchange)) %>%
ungroup()这意味着:
# A tibble: 9 x 7
ID_1 ID_2 other exchange goods new_id sum_exchange
<chr> <chr> <chr> <dbl> <chr> <chr> <dbl>
1 a a 1 1 wood a-a 1
2 a b bu 13 wood a-b 21
3 a c 34 34 wood a-c 34
4 a d 3 3 wood a-d 3
5 a e 5 5 wood a-e 5
6 b b 6 6 steel b-b 6
7 b a jud 8 steel a-b 21
8 b c 82 82 steel b-c 82
9 b d 9 9 steel b-d 9发布于 2021-11-21 16:24:11
你们很亲密:
library(dplyr)
df %>% group_by(ID_1, ID_2) %>% summarise(Sum_Exchange = sum(exchange))这产生了:
# A tibble: 9 x 3
# Groups: ID_1 [2]
ID_1 ID_2 Sum_Exchange
<chr> <chr> <dbl>
1 a a 1
2 a b 13
3 a c 34
4 a d 3
5 a e 5
6 b a 8
7 b b 6
8 b c 82
9 b d 9然后,您可以删除相同的ID,以省略AA,BB。
df %>%
group_by(ID_1, ID_2) %>%
summarise(Sum_Exchange = sum(exchange)) %>%
filter(ID_1 != ID_2)-从注释中添加
将数据格式与{dplyr}的bind_rows(df1, df2)结合起来。
请注意,bind_rows()将为原始数据框架中不存在的变量/列生成新列,并使用NA填充现有列的单元格。
您可以将某些值重命名为相同的列/变量。
为了你手头的问题。检查一下你想要什么/需要什么。原始数据框架带有other, goods变量。因此,这些不存在于摘要数据框架中。执行bind_rows()将使用NA填充这些数据。要使Sum_Exchange进入exchange变量,请重命名该列。
https://stackoverflow.com/questions/70056141
复制相似问题