我是该小组和R的新手。我早些时候发布了一个问题,非常感谢所提供的帮助,但意识到我不太清楚。因此,希望这是更好的尝试来阐明我的问题。预先感谢任何可以提供帮助的人。
我有一个数据集,其中包含赛马名称以及每个赛马性能等级“ DaH”(整数)和马匹在“代码”(字符)中进行的比赛类型。
数据集包含7匹马,从最近的3场比赛(DaH1到DaH3,其中DaH1是最近/最近比赛的性能等级,DaH3是马匹3个比赛之前的性能等级。同样,从代码1到代码3的代码也提供了马跑进去的代码。
因此,通过查看下面的数据集,您可以看到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”代码种族。
例如,您可以看到第六匹马在最后一场比赛中参加了“ H”码比赛。这需要从数据集中删除,以便只有第6匹马达到的两个种族DaH2 = 0和DaH3 = 137仍然保持其两个C代码种族的平均DaH评级为68.5。
我一直在尝试使用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
非常感谢格雷厄姆
在Base-R中:
首先我们将相应的非C值更改为NA
racehorse_data[,c(2,4,6)][racehorse_data[,c(1,3,5)]!="C"] <- NA
然后修剪数据框并获取行意味着忽略NA值
racehorse_data <- racehorse_data[,c(2,4,6)]
racehorse_data$Mean <- apply(racehorse_data,1,mean,na.rm=T)
输出:
> racehorse_data
DaH1 DaH2 DaH6 Mean
1 0 124 127 83.66667
2 124 117 0 80.33333
3 121 125 0 82.00000
4 123 120 124 122.33333
5 0 125 NA 62.50000
6 NA 0 137 68.50000
7 110 NA 127 118.50000