【问题标题】:R data.table tidying - condense rows based on muliple criteria [duplicate]R data.table tidying - 基于多个标准压缩行[重复]
【发布时间】:2016-08-24 19:46:56
【问题描述】:

***为了提出这个问题,我在下面的示例中删除了一个 Time 列,该列存在于我的实际数据中,该列具有实际时间(尽管标称时间相同,但秒数不同),这导致我的数据每行有一个分数。当我四舍五入这些时间时,我使用 dcast 解决了我的问题:)

我目前正在尝试整理我的数据,但遇到了一些障碍(我是 R 的初学者,大部分时间都是从这个网站学习的)。我想根据匹配人员和症状的标称时间将我的数据转换为在列中显示症状。通过这些数据整理,我将把我的 64,000 个观察数据集减少到大约 8,000 个。我的数据目前如下所示:

Person  Nominal.Time  Name           Score
1       +30           A              6
1       +30           B              9
1       +30           C              3
2       +90           A              1
2       +90           B              5
2       +90           C              2

我能够将我的数据转换为以下内容:

library(reshape2)
WideSymptomData <- dcast(SymptomData,Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score")

Person  Nominal.Time  A   B   C
1       +30           6                
1       +30               9           
1       +30                   3       
2       +90           1              
2       +90               5          
2       +90                   2       

但不幸的是,我在这一点上被难住了。我一直在研究,似乎无法找到下一步如何最终实现这一目标:

Person  Nominal.Time  A   B   C
1       +30           6   9   3                
2       +90           1   5   2        

我认为这个question 可能与我的相似,尽管我无法成功应用它的答案。非常感谢任何指导,谢谢!

【问题讨论】:

  • reshape(data, dir = 'wide', idvar = c('Person','Nominal.Time'), timevar = 'Symptom.Name')

标签: r data.table reshape2


【解决方案1】:

使用以下数据

SymptomData <- data.table(read.table(text="Person  Nominal.Time  Symptom.Name   Symptom.Score
1       +30           A              6
1       +30           B              9
1       +30           C              3
2       +90           A              1
2       +90           B              5
2       +90           C              2", header=T, colClasses=c("numeric","character","character","numeric")))

这很好用

dcast(SymptomData, Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score")
#   Person Nominal.Time A B C
# 1      1          +30 6 9 3
# 2      2          +90 1 5 2

reshape2_1.4.1data.table_1.9.6 测试。确保您的示例能够代表您的真实数据。

【讨论】:

  • 当我使用该代码时,我收到此消息“使用 Nominal.Time 作为值列:使用 value.var 覆盖。”并且症状 A、B、C 列填充有 Nominal.Time 值,我仍然面临许多包含空白 (NA) 的行,正如我在最初的帖子中概述的那样。
  • 您可能想尝试添加 value.var 参数:dcast(SymptomData, Person+Nominal.Time~Symptom.Name, value.var="Symptom.Score")
  • @willz 你能添加你正在使用的包的版本号吗?你用上面的数据测试了吗?还是你有更多的专栏或其他什么?
  • @MrFlick 我刚刚用上面的数据进行了测试,是的,它确实有效。这与我实际拥有的数据之间的区别在于一些额外的列,包括日期、实际时间等。这就是为什么我有点困惑错误的来源。我有点犹豫是否要对我的数据进行子集化,进行计算然后将其合并回来,因为我想维护那些其他列并希望避免错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2020-04-16
相关资源
最近更新 更多