【问题标题】:Using R. I need to Melt or Reshape my Horse Racing dataframe使用 R。我需要融化或重塑我的赛马数据框
【发布时间】: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 @

标签: r reshape2 melt


【解决方案1】:

在 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

【讨论】:

  • 谢谢。这是很大的帮助。
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多