我收集了大量数据,并试图有效地将其变形。这是我的data.frame的一般格式的简化简短示例。主要区别在于我的采样单元还有一些数据标签,例如Label1
- 每个都有一组类似于我所包含的data.frame的数据,但在我的情况下,它们都在相同的数据中。帧。我认为这不会使重新格式化变得复杂,所以我在这里只包含了模拟数据的单个采样单元。 StatsType
级别Ave
,Max
和Min
实际上嵌套在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 ...
我认为reshape
,dplyr
,tidyr
和/或data.table
的某些功能组合可以完成这项工作,但我无法弄清楚如何编码它。这是我尝试过的:
首先,我spread
tastycheez
(yum!),这让我有所作为:
test<-spread(tastycheez,StatsType,Data_values)
现在我想再次spread
或cast
,但没有运气:
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?
答案 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