【发布时间】:2015-09-22 20:52:40
【问题描述】:
当这些值在 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 在 df$number 中,则将每个相应的评分相加并除以一个或多个评分。因此,在这种情况下,p1_games 的输出将是1078。我觉得这真的很简单,但不能完全做到这一点。
【问题讨论】:
-
在使用随机数据制作示例时请使用
set.seed。而且,即使您无法为所需的输出编写工作代码,最好显示您的示例所需的输出是什么。 (这可能意味着将示例的大小减小到可以手动计算结果的位置。) -
除了弗兰克所说的,您对两个示例
p*_games向量的预期输出究竟是什么? -
抱歉没有更清楚。我进行了修改,希望能真正简化这一点。