如何在单个列(长)中创建具有多个嵌套组类别的数据

时间:2015-10-12 21:20:52

标签: r tidyr

我收集了大量数据,并试图有效地将其变形。这是我的data.frame的一般格式的简化简短示例。主要区别在于我的采样单元还有一些数据标签,例如Label1 - 每个都有一组类似于我所包含的data.frame的数据,但在我的情况下,它们都在相同的数据中。帧。我认为这不会使重新格式化变得复杂,所以我在这里只包含了模拟数据的单个采样单元。 StatsType级别AveMaxMin实际上嵌套在MeasureType中。

tastycheez<-data.frame(
  Day=rep((1:3),9),
  StatsType=rep(c(rep("Ave",3),rep("Max",3),rep("Min",3)),3),
  MeasureType=rep(c("Temp","H2O","Tastiness"),each=9),
  Data_values=1:27,
  Label1=rep("SamplingU1",27))

最终,我想要一个数据框,每个采样单元和每个Day都有一些列为我的类别保留Data_values的列,如下所示:

 Day     Label1   Ave.Temp Ave.H2O Ave.Tastiness  Max.Temp ...
 1   SamplingU1          1      10            19         4 ...
 2   SamplingU1          2      11            20         5 ...

我认为reshapedplyrtidyr和/或data.table的某些功能组合可以完成这项工作,但我无法弄清楚如何编码它。这是我尝试过的:

首先,我spread tastycheez(yum!),这让我有所作为:

test<-spread(tastycheez,StatsType,Data_values)

现在我想再次spreadcast,但没有运气:

test2<-spread(test,MeasureType,(Ave,Max,Min))

test2 <- recast(Day ~ MeasureType+c(Ave,Max,Min), data=test)

(我也试过melt tastycheez但是结果是一个粘糊糊的混乱,我的舌头被烧了。似乎不是正确的这个功能。)

如果你讨厌我的双关语,请原谅他们,我真的无法弄清楚这一点!

以下是一些相关问题: Combining two subgroups of data in the same dataframe How can I spread repeated measures of multiple variables into wide format?

1 个答案:

答案 0 :(得分:4)

reshape2 您可以使用 reshape2 中的dcast

library(reshape2)
dcast(tastycheez, 
  Day + Label1 ~ paste(StatsType, MeasureType, sep="."), 
  value.var = "Data_values")

给出了

  Day     Label1 Ave.H2O Ave.Tastiness Ave.Temp Max.H2O Max.Tastiness Max.Temp Min.H2O Min.Tastiness Min.Temp
1   1 SamplingU1      10            19        1      13            22        4      16            25        7
2   2 SamplingU1      11            20        2      14            23        5      17            26        8
3   3 SamplingU1      12            21        3      15            24        6      18            27        9

tidyr 窃取@ DavidArenburg的评论,这里是 tidyr 的方式:

library(tidyr)
tastycheez %>%
       unite(temp, StatsType, MeasureType, sep = ".") %>% 
       spread(temp, Data_values)

给出了

  Day     Label1 Ave.H2O Ave.Tastiness Ave.Temp Max.H2O Max.Tastiness Max.Temp Min.H2O Min.Tastiness Min.Temp
1   1 SamplingU1      10            19        1      13            22        4      16            25        7
2   2 SamplingU1      11            20        2      14            23        5      17            26        8
3   3 SamplingU1      12            21        3      15            24        6      18            27        9