R:从长转为宽并聚合具有匹配 ID 的行

标签 r dataframe transformation transpose reshape2

这是我已经工作了一段时间的事情,只是制作单独的数据帧并进行 full_join,但我认为有一种更简单的方法。

总的来说,我想根据长格式数据帧的类型计算从时间 1 到时间 2 的单个 ID 值之间的差异。这是我认为我可以做到的方法之一,但如果其他人有其他技术或想法,我也想听听。

但是,我也想知道如何解决这个转置问题,因为我很好奇。

这是我的问题。

我有一个长格式的数据框,其中包含两个不同时间段的 5 种不同度量。我想将此数据帧从长格式转换为宽格式,这样 DF 就不会像这样(注意,并非所有类型都包含在内 - 为了长度起见,只做了 2 个):

(示例 df1)

ID   Time  Value  Type
1     1      7     Type1
1     2      8     Type1
2     1      9     Type1
2     2      10    Type1
1     1      13    Type2
1     2      15    Type2
2     1      17    Type2
2     2      19    Type2

我希望它看起来更像这样:

(示例 df 2)

ID   Type1.1   Type1.2    Type2.1  Type2.2
1      7          8          13      15
2      9          10         17      19 

我使用:

library(dplyr)
library(tidyr)
df.new <- df %>%
spread(Type, Measurement.Value)

并从正确的示例 df 1 中获取此内容:

(示例 df 3)

ID    Time    Type1    Type2
1       1       7        13
1       2       8        15
2       1       9        17
2       2       10       19

但现在我想分散每种类型的时间。当我在示例 df3 上执行类似操作时:

newer.df <- df.new %>%
spread(Time, Type1)

要做到这一点:

ID   Type1.1   Type1.2
1      7          NA 
1      NA         8 
2      9          NA
2      NA         10

所以,它为每一行生成一个 NA —— 有没有办法可以通过 ID 将行折叠到彼此上?我想我错过了一些东西。

请记住,在我的示例代码中,我只使用了 2 种类型,但实际上我有 5 种类型 - 只是想提供简化的代码。

最佳答案

我们可以使用reshape2包中的dcast()

library(reshape2)
dcast(df, ID ~ Type + Time, value.var = "Value")
#  ID Type1_1 Type1_2 Type2_1 Type2_2
#1  1       7       8      13      15
#2  2       9      10      17      19

关于R:从长转为宽并聚合具有匹配 ID 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902491/

相关文章:

html - 没有适用于 'xpathApply' 的方法应用于类 "NULL"的对象

r - knitr 可以处理同一目录中的多个 .Rmd 文件吗?

删除零行小标题的列表元素

regex - 使用 gsub 创建统一的时间格式

python - 扩 Pandas 数据框

python - 使用 Pandas 对数据框进行排序。保持列完好无损

windows-phone-7 - 查找多边形坐标WP7

python - 使用 Python 和 Pandas 将 Excel 工作表拆分为单独的工作表

matlab - 严格地将 2D 图像注册到 3D 体积,并为仿射变换提供良好的初始猜测

python - TensorFlow 中的变换矩阵