我有这样的数据:
table <- data.frame(col1 = c("USA", "CHN", "DEU", "DEU"), col2 = c("DEU", "DEU", "USA", "CHN"), col3 = c(100, 150, 300, 250))
col1 col2 col3
1 USA DEU 100
2 CHN DEU 150
3 DEU USA 300
4 DEU CHN 250
如何根据col1和col2中值的组合折叠此表,而不依赖于此组合的序列 - 以便我有下表?
col1 col2 col3
1 USA DEU 400
2 CHN DEU 400
非常感谢您提供的任何建议
更新:请点击此处查看更新数据:
AUS AUS 431.92164
AUS AUS 581.14942
AUS AUS 1822.10345
AUS AUS 1024.4436
AUS AUS 126.45221
AUS AUS 171.01716
AUS AUS 432.23415
AUS AUS 35.28675
AUS AUS 1488.02559
AUS AUS 0
AUS AUS 9057.73836
AUS AUS 9933.79762
AUS AUS 4307.49845
AUS AUS 73.33633
AUT AUT 1089.27094
AUT AUT 413.83978
AUT AUT 118.46822
AUT AUT 3700.34366
答案 0 :(得分:1)
以下是使用aggregate
的基本R解决方案:
table[, 1:2] <- t(apply(table[, 1:2], 1, sort))
aggregate(col3 ~ col1 + col2, table, sum)
# col1 col2 col3
#1 CHN DEU 400
#2 DEU USA 400
说明:第一行使用sort
重新排序前两列中的条目,然后根据aggregate
和{中的条目使用col3
汇总col1
个条目{1}}。
或使用col2
方法:
tidyverse
使用您的更新数据
library(tidyverse);
table %>%
mutate_if(is.factor, as.character) %>%
rowwise() %>%
mutate(tmp = paste(sort(c(col1, col2)), collapse = "_")) %>%
ungroup() %>%
group_by(tmp) %>%
summarise(col3 = sum(col3)) %>%
separate(tmp, c("col1", "col2"))
## A tibble: 2 x 3
# col1 col2 col3
# <chr> <chr> <dbl>
#1 CHN DEU 400.
#2 DEU USA 400.