【发布时间】:2016-07-29 03:27:52
【问题描述】:
我正在处理如下所示的长格式数据集。
id Name FluidTotal
60718 Rocuronium 11.069175
07860 Rocuronium 5.967500
90389 Rocuronium 200.000000
01536 Rocuronium 78.311333
01536 Rocuronium 51.415600
28047 Rocuronium 72.944444
28047 Acid 1
28047 Acid 1
28047 Acid 1
28047 Acid 1
92323 Acid 1
92323 Void 100
01536 Void 25
60718 Void 70
60718 Void 40
我正在尝试将其转换为如下所示的宽格式
Id Rocuronium Acid Void
60718 11.069175 - 110
07860 5.967500 - -
90389 200.000000 - -
01536 129.72693 - 25
28047 72.944444 4 -
92323 - 1 100
第一行是 60718 11.069175 - 110 ,Void 的单元格值是 110 因为长格式的 id 60718 的最后两行是 70 和 40 所以当它们转换为宽格式这两个值相加。
类似地,宽格式 id 01536 的 Rocuronium 的值是 129.72693,因为此 id 01536 的长格式中的第 4 行和第 5 行是 78.311333 和 51.415600
感谢您在完成此转换方面的任何帮助,在此先感谢..
【问题讨论】:
-
与此处基本相同 - stackoverflow.com/questions/35424064/… - 只需将
min替换为sum-reshape(aggregate(FluidTotal ~ ., data=dat, FUN=sum), idvar="id", timevar="Name", direction="wide") -
或者,你可以使用
tidyr包的spread函数。 -
reshape(aggregate( ....))似乎是新 R 用户一次成功和后来失败的处方。大多数有经验的 R 用户仍然无法使用reshape。 -
@42- 我真的不明白
reshape的普遍问题。无论如何,tapply也是一个很好的解决方案,但它也将id列丢失为row.name,这可能也会让初学者感到悲痛。 -
也许您是唯一一个可以阅读
reshape帮助页面并找出哪些参数用于宽到长转换以及哪些参数用于长到宽的转换。我通常在第四次或第五次失败后放弃。