R和编码一般来说是新手。我的直觉是,这应该有一个非常基本的答案,因此,如果这太基础而无法花时间学习,请随时将我带回基础入门班。
为了使事情变得容易,我将把我的问题减少到具有相同显着特征的更为简单的情况。
我有两个数据框。第一个显示有些人玩过“白色”游戏。第二个显示一些人为“黑色”支付的游戏数量。有些球员既扮演白人又扮演黑人,而另一些则只扮演其中一种角色。
我想将这两个数据框合并为一个,以显示所有曾扮演任一角色的球员以及他们打了多少场比赛,无论是白人还是黑人。
可复制的示例:
"SELECT C, COUNT(C), AVG(G), AVG(E) GROUP BY C ORDER BY COUNT(C) DESC FORMAT AVG(G) '##0.00', AVG(E) '##0.00' LABEL COUNT(C) 'My count'"
我如何获得一个合并的数据集,以显示所有6位玩家玩过的白色或黑色游戏总数?
谢谢!
答案 0 :(得分:0)
为了可重复性,最好指定一个随机种子,这样,每次运行该示例时,对于其他示例而言,该示例均相同。我还建议使用stringsAsFactors = FALSE
,以便将名称视为字符而不是因素,这会使此过程变得简单一些。 (编辑:但是在默认情况下,它在这里也应该可以正常工作。)
set.seed(0)
player_as_white <- c('John', 'Max', 'Grace', 'Zoe', 'Peter')
games_white <- c(sample(1:20,5))
dat1 <- data.frame(player_as_white, games_white, stringsAsFactors = FALSE)
player_as_black <- c('John', 'Eddie', 'Zoe')
games_black <- c(sample(1:20, 3))
dat2 <- data.frame(player_as_black, games_black, stringsAsFactors = FALSE)
然后我们可以使用merge
来将两者结合起来:
merge(dat1, dat2, by.x = "player_as_white", by.y = "player_as_black", all = T)
# player_as_white games_white games_black
#1 Eddie NA 18
#2 Grace 7 NA
#3 John 18 5
#4 Max 6 NA
#5 Peter 15 NA
#6 Zoe 10 19
或者使用dplyr
解决方案,该解决方案保留来自dat1
的订单
library(dplyr)
full_join(dat1, dat2, by = c("player_as_white" = "player_as_black"))
# player_as_white games_white games_black
#1 John 18 5
#2 Max 6 NA
#3 Grace 7 NA
#4 Zoe 10 19
#5 Peter 15 NA
#6 Eddie NA 18