组合两个数据帧并增加常用条目的计数

时间:2017-12-06 13:06:39

标签: r

我有两个数据帧,我在争论数据后计算过,而且我仍然坚持如何将它们组合起来。我试图重新创建以下场景:

第一个数据帧d1:

player <- c("Ace", "Ace", "Ace", "Ace")
champ <- c("Azir", "Kassadin", "Xerath", "Zed")
games.played <- c(1, 2, 1, 1)
d1 <- data.frame(player, champ, games.played)

看起来像这样:

player  champ   games.played
-------------------------
Ace     Azir         1
Ace     Kassadin     2
Ace     Xerath       1
Ace     Zed          1

第二个数据帧d2:

player <- c("Ace", "Ace", "Ace", "Ace")
champ <- c("Chogath", "Karthus", "Victor", "Xerath")
games.played <- c(1, 1, 1, 2)
d2 <- data.frame(player, champ, games.played)

看起来像这样:

player  champ   games.played
-------------------------
Ace     Chogath     1
Ace     Karthus     2
Ace     Viktor      1
Ace     Xerath      1

我想要的输出是(排序不相关):

player  champ   games.played
-------------------------
Ace     Azir         1
Ace     Kassadin     2
Ace     Xerath       3
Ace     Zed          1
Ace     Chogath      1
Ace     Karthus      1
Ace     Victor       1

这里有一个问题,如果两个数据帧中都存在一对玩家和冠军,我只想添加所玩的游戏数量。否则,只需添加不存在的对。

我到目前为止最接近的是使用rbind(d1, d2)给出了以下输出:

player    champ     games.played
-------------------------
Ace       Azir      1
Ace       Kassadin  2
Ace       Xerath    1
Ace       Zed       1
Ace       Chogath   1
Ace       Karthus   1
Ace       Victor    1
Ace       Xerath    2

我的实际数据框要大得多,所以我不能手动检查重复行并单独组合它们并添加games.played。我的实际数据帧由(玩家,冠军)排列,这就是为什么我创建的场景是这样排序的。真的很感激任何帮助!

1 个答案:

答案 0 :(得分:0)

我们可以rbind两个数据集,然后分组,并使用sum中的aggregate获取base R

aggregate(games.played~., rbind(d1, d2), sum)

dplyr类似的选项bind_rows group_bysummarise

library(dplyr)
bind_rows(d1, d2) %>% 
    group_by(player, champ) %>% 
    summarise(games.played = sum(games.played))