有效匹配值和平均列TRUE

时间:2015-09-22 20:52:40

标签: r matching

当这些值在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。我觉得这很简单,但不能完成这项工作。

2 个答案:

答案 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