当这些值在R中有效匹配时,只是匹配值并取一列的平均值时遇到了麻烦。基本上我有一张国际象棋表,我已经从中提取数据并希望获得每个玩家的平均值#s根据他们与谁比赛的前棋评分。
如果我有数据框:
number <- c(1:10) #number assigned to each player
rating <- c(1000,1200,1210,980,1000,1001,1100,1300,1100,1250) #rating of the player
df <- data.frame(number= number, rating = rating)
p1_games <- c(1,2,3,4,5) # player 1 played against players 2,3,4,5
我基本上要做的是检查p1_games中的值是否与表中的数字匹配,当它们匹配时,对rating列中的值进行平均。 我只想返回一个值,因此我在尝试使ifelse()工作时遇到了麻烦:
avg_rate <- ifelse(p1_games %in% df$number, sum(df$rating)/length(p1_games)) #not working
如果可能的话,我想避免循环,但如果没有其他有效方法可以做到这一点。只是无法弄清楚这里有什么。理想情况下,我希望将此逻辑应用于许多p * _games向量。
如果p1_games为df $ number,请将每个相应的评分相加并除以数字或等级。因此,在这种情况下,p1_games的输出将为 1078
。我觉得这很简单,但不能完成这项工作。
答案 0 :(得分:3)
%in%
很擅长这种事情
> mean(df[number %in% p1_games, "rating"])
[1] 1078
答案 1 :(得分:2)
使用data.table
的替代答案,可能适用于较大的数据集(虽然p1_games
不是列,但我不确定):
> setDT(df)
> df[number %in% p1_games, mean(rating)]
[1] 1078