【发布时间】:2020-09-14 09:20:21
【问题描述】:
我是小组和 R 的新手。 我之前发布了一个问题,非常感谢提供的帮助,但意识到我不是很清楚。 因此,希望这是一个更好的尝试来澄清我的问题。 提前感谢任何可以提供帮助的人。
我有一个数据集,其中包含赛马名称以及每匹赛马 性能等级,'DaH',(整数)和马匹在'代码'中运行的比赛类型,(字符)。
数据集有 7 匹马,最近 3 场比赛的表现评级 (DaH),DaH1 到 DaH3, 其中 DaH1 是最后/最近一场比赛的表现等级,DaH3 是马匹 3 场比赛前的表现评分。 同样,代码 Code1 到 Code3 提供了马跑进去的代码。
因此,查看下面的数据集,您可以看到 horse2 在其最后一场比赛中参加了代码 C 比赛 并获得了 124 的性能评级 DaH1。
我从赛马数据提供商处导入赛马数据。
> racehorse_data
Code1 DaH1 Code2 DaH2 Code3 DaH3
1 C 0 C 124 C 127
2 C 124 C 117 C 0
3 C 121 C 125 C 0
4 C 123 C 120 C 124
5 C 0 C 125 H 122
6 H 122 C 0 C 137
7 C 110 H 115 C 127
structure(list(Code1 = c("C", "C", "C", "C", "C", "H", "C"),
DaH1 = c(0L, 124L, 121L, 123L, 0L, 122L, 110L), Code2 = c("C",
"C", "C", "C", "C", "C", "H"), DaH2 = c(124L, 117L, 125L,
120L, 125L, 0L, 115L), Code3 = c("C", "C", "C", "C", "H",
"C", "C"), DaH6 = c(127L, 0L, 0L, 124L, 122L, 137L, 127L)), class = "data.frame", row.names = c(NA,
-7L))
我需要在剔除任何性能评分后计算每匹马的平均 DaH 评分 这是在不是“C”代码的代码中实现的。 澄清: 我遇到的问题是我需要删除任何性能评级,DaH,其中 竞赛代码不是“C”代码竞赛。
因此,例如,您可以看到马 6 在其最后一场比赛中参加了“H”代码比赛。 这需要从数据集中删除,以便只有马 6 获得的两场比赛 DaH2=0 和 DaH3=137 仍然为其两个代码 C 比赛提供 68.5 的平均 DaH 评级。
我一直在尝试使用 MELT 命令来实现重新配置的数据帧 这将使我能够过滤掉比赛代码不相等的 DaH 评级 到“C”。但我没能做到这一点。
我突然想到,我可以将每匹马 DaH 和 Code 隔离为一个单独的数据框和 分别处理每匹马,但这似乎比我想的要复杂。
我的理想输出是一个数据框,例如:
> racehorse_data
DaH1 DaH2 DaH3 Mean
1 0 124 127 83.7
2 124 117 0 80.3
3 121 125 0 82
4 123 120 124 122.3
5 0 125 na 62.5
6 na 0 137 68.5
7 110 na 127 118.5
或者也许每匹马有一个单独的向量
horse 1 0 124 127 83.7
horse 2 124 117 0 80.3
etc
非常感谢 格雷厄姆
【问题讨论】:
-
您的示例
dput数据具有DaH6而不是DaH3。这是故意的吗? -
你在这里“融化”在两组中 - 像
reshape(dat, idvar="horse", varying=TRUE, sep="", direction="long")这样的东西应该给你我在基础 R 中想要的东西。类似的例子显示在这里 - stackoverflow.com/questions/12466493/… 和这里 - @987654322 @