r语言 - 有效匹配值和平均列,其中TRUE



当这些值在r中有效匹配时,在匹配值和取一列的平均值时遇到麻烦。本质上,我有一个象棋表,我从中提取了数据,并希望根据他们的对手获得每个玩家在下棋前的平均评分。

如果我有一个数据帧:

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中的值是否与表中的某个数字匹配,如果匹配,则对评级列中的值求平均值。我只想返回一个值,所以我在尝试使ifelse()工作时遇到了麻烦:

avg_rate <- ifelse(p1_games %in% df$number, sum(df$rating)/length(p1_games)) #not working

我希望尽可能避免循环,但如果没有其他有效的方法,也没关系。只是不知道这上面有什么。理想情况下,我希望将这种逻辑应用于许多p*_games向量。

如果p1_games in df$number,将每个对应的评分相加并除以评分数。所以p1_games的输出在这种情况下将是 1078

%in%很擅长这种事情

> mean(df[number %in% p1_games, "rating"])
[1] 1078

使用data.table的替代答案,这可能与更大的数据集一起使用(尽管由于p1_games不是列,我不确定):

> setDT(df)
> df[number %in% p1_games, mean(rating)]
[1] 1078

相关内容

最新更新