r - 匹配具有不同列名的两个数据框,并创建具有另一个平均值的新列
问题描述
我有两个数据框。第一个只列出每个学校/团队一次,如下所示:
classA <- data.frame(School=c("Omaha South", "Millard North", "Elkhorn"))
另一个数据框是整个赛季的篮球得分表,您可以在同一列中多次列出学校/球队:
scores <- data.frame('Away Score'=c(60,84,48,72),
'Away Team'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"),
'Home Score'=c(88,40,38,62),
'Home Team'=c("Elkhorn", "Omaha South", "Millard North","Omaha South"))
我的目标是创建一个名为 classA$'Away PPG' 的新列,该列对第一个数据框中每所学校的所有“Away 分数”进行平均。因此,对于 Elkhorn,新的 A 类列将是 60 (48+72)/2。
我卡住的一个地方是两个 dfs 有不同的列名来匹配,我还没有找到如何处理这方面的问题。
我之前在一个有点相关的问题上得到了帮助,我正在寻找一个计数而不是一个平均值,但无法弄清楚如何修改它以适用于这个问题。计数问题的解决方案如下所示:
df2 %>%
right_join(df1, by = c('Winner' = 'School')) %>%
na.omit() %>%
count(Winner, name = "wins") %>%
right_join(df1, c('Winner' = 'School')) %>%
mutate(wins = replace(wins, is.na(wins), 0))
解决方案
我们可以加入classA
,scores
然后mean
为Away.Score
每个School
.
library(dplyr)
classA %>%
left_join(scores, by = c('School' = 'Away.Team')) %>%
group_by(School) %>%
summarise(AwayScore = mean(Away.Score, na.rm = TRUE))
# A tibble: 3 x 2
# School AwayScore
# <fct> <dbl>
#1 Elkhorn 60
#2 Millard North 84
#3 Omaha South 60
同样在基础 R
aggregate(Away.Score~School,
merge(classA, scores, by.x = 'School', by.y = 'Away.Team'),
mean, na.rm = TRUE)
推荐阅读
- php - Imagemagick trimimage 功能也会在图像内部存在背景颜色时进行修剪(不仅仅是边框)
- typescript - 基于条件类型的可选参数
- indexing - Pyspark 向数据框添加顺序和确定性索引
- python - 调用索引集中的上一个/下一个集合成员的约束
- java - Lambda 表达式 - 列表到映射
- c# - Syncfusion DataGrid过滤器单击时参数不正确但右键单击
- security - Workfusion 代码是否有任何 SAST 工具?
- android - Dreamweaver 确实为 Android 应用程序创建键符号?
- jquery - 如果复选框被标记,CakePhp 2 会阻止 ajax
- dictionary - 将字典数组转换为数据帧的惯用方法是什么