如何在具有多个嵌套组类别的单列(长)中制作数据
How to make data in a single column (long) with multiple, nested group categories wide
我有一大堆数据,正在尝试有效地整理它们。现在,这是我的 data.frame 一般格式的简化简短示例。主要区别在于,我的抽样单元有更多数据标签,例如 Label1
- 每个标签都有一组类似于我包含的 data.frame 的数据,但在我的情况下,它们都在相同 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
、and/or data.table
的一些函数组合可以完成这项工作,但我想不出来了解如何对其进行编码。这是我尝试过的:
首先,我 spread
tastycheez
(嗯!),这让我中途:
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
ing tastycheez
但 结果是粘糊糊的,粘糊糊的,我的舌头被烧焦了。 没有似乎是这个的正确功能。)
如果你讨厌我的双关语,请原谅,我真的想不通!
这里有几个相关的问题:
Combining two subgroups of data in the same dataframe
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
我有一大堆数据,正在尝试有效地整理它们。现在,这是我的 data.frame 一般格式的简化简短示例。主要区别在于,我的抽样单元有更多数据标签,例如 Label1
- 每个标签都有一组类似于我包含的 data.frame 的数据,但在我的情况下,它们都在相同 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
、and/or data.table
的一些函数组合可以完成这项工作,但我想不出来了解如何对其进行编码。这是我尝试过的:
首先,我 spread
tastycheez
(嗯!),这让我中途:
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
ing tastycheez
但 结果是粘糊糊的,粘糊糊的,我的舌头被烧焦了。 没有似乎是这个的正确功能。)
如果你讨厌我的双关语,请原谅,我真的想不通!
这里有几个相关的问题:
Combining two subgroups of data in the same dataframe
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