将聚合输出转换为宽格式
Converting aggregate output to wide format
我使用聚合函数制作了一个长格式数据框,但一位同事需要在 Excel 中使用它。我发现转换为宽格式很棘手。我需要将 "variable" 和 "Type" 列分成几列,每个列包含它们包含的成员(额叶、顶叶和枕骨)和(alpha、beta、gamma、delta 和 theta)。
dput(head(aggdata))
structure(list(Time = c(1, 2, 3, 4, 5, 6), Type = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("alpha", "beta", "gamma", "delta",
"theta"), class = c("ordered", "factor")), Group = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("C", "N"), class = "factor"),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Frontal",
"Parietal", "Occipital"), class = "factor"), Condition = c(1,
1, 1, 1, 1, 1), value = c(0.0947259533333333, 0.0489575420666667,
0.0686301660666667, 0.0754647909333333, 0.0708219834666667,
0.0644100006)), .Names = c("Time", "Type", "Group", "variable",
"Condition", "value"), row.names = c(NA, 6L), class = "data.frame")
您可能需要检查 reshape2
包,以及 dcast 和 melt 函数。
你这里有一个很好的熔化数据集,你想投射。
让我先更改您的样本数据,因为它没有提供多个变量来传播。
agg_data <- rbind(agg_data,head(agg_data,1))
agg_data$variable[7] <- "Parietal"
agg_data$value[7] <- 0.0686301660666667
agg_data
# Time Type Group variable Condition value
# 1 1 alpha C Frontal 1 0.09472595
# 2 2 alpha C Frontal 1 0.04895754
# 3 3 alpha C Frontal 1 0.06863017
# 4 4 alpha C Frontal 1 0.07546479
# 5 5 alpha C Frontal 1 0.07082198
# 6 6 alpha C Frontal 1 0.06441000
# 7 1 alpha C Parietal 1 0.06863017
这是我认为你想要的行:
dcast(agg_data, Time + Type + Group + Condition ~ variable)
# Time Type Group Condition Frontal Parietal
# 1 1 alpha C 1 0.09472595 0.06863017
# 2 2 alpha C 1 0.04895754 NA
# 3 3 alpha C 1 0.06863017 NA
# 4 4 alpha C 1 0.07546479 NA
# 5 5 alpha C 1 0.07082198 NA
# 6 6 alpha C 1 0.06441000 NA
左边放你想聚合的数据,右边放你想散布的变量,你可以在右边放一个变量的总和,散布在几个变量上,例如:
dcast(agg_data, Time + Group + Condition ~ variable + Type)
# Time Group Condition Frontal_alpha Parietal_alpha
# 1 1 C 1 0.09472595 0.06863017
# 2 2 C 1 0.04895754 NA
# 3 3 C 1 0.06863017 NA
# 4 4 C 1 0.07546479 NA
# 5 5 C 1 0.07082198 NA
# 6 6 C 1 0.06441000 NA
我使用聚合函数制作了一个长格式数据框,但一位同事需要在 Excel 中使用它。我发现转换为宽格式很棘手。我需要将 "variable" 和 "Type" 列分成几列,每个列包含它们包含的成员(额叶、顶叶和枕骨)和(alpha、beta、gamma、delta 和 theta)。
dput(head(aggdata))
structure(list(Time = c(1, 2, 3, 4, 5, 6), Type = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("alpha", "beta", "gamma", "delta",
"theta"), class = c("ordered", "factor")), Group = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("C", "N"), class = "factor"),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Frontal",
"Parietal", "Occipital"), class = "factor"), Condition = c(1,
1, 1, 1, 1, 1), value = c(0.0947259533333333, 0.0489575420666667,
0.0686301660666667, 0.0754647909333333, 0.0708219834666667,
0.0644100006)), .Names = c("Time", "Type", "Group", "variable",
"Condition", "value"), row.names = c(NA, 6L), class = "data.frame")
您可能需要检查 reshape2
包,以及 dcast 和 melt 函数。
你这里有一个很好的熔化数据集,你想投射。
让我先更改您的样本数据,因为它没有提供多个变量来传播。
agg_data <- rbind(agg_data,head(agg_data,1))
agg_data$variable[7] <- "Parietal"
agg_data$value[7] <- 0.0686301660666667
agg_data
# Time Type Group variable Condition value
# 1 1 alpha C Frontal 1 0.09472595
# 2 2 alpha C Frontal 1 0.04895754
# 3 3 alpha C Frontal 1 0.06863017
# 4 4 alpha C Frontal 1 0.07546479
# 5 5 alpha C Frontal 1 0.07082198
# 6 6 alpha C Frontal 1 0.06441000
# 7 1 alpha C Parietal 1 0.06863017
这是我认为你想要的行:
dcast(agg_data, Time + Type + Group + Condition ~ variable)
# Time Type Group Condition Frontal Parietal
# 1 1 alpha C 1 0.09472595 0.06863017
# 2 2 alpha C 1 0.04895754 NA
# 3 3 alpha C 1 0.06863017 NA
# 4 4 alpha C 1 0.07546479 NA
# 5 5 alpha C 1 0.07082198 NA
# 6 6 alpha C 1 0.06441000 NA
左边放你想聚合的数据,右边放你想散布的变量,你可以在右边放一个变量的总和,散布在几个变量上,例如:
dcast(agg_data, Time + Group + Condition ~ variable + Type)
# Time Group Condition Frontal_alpha Parietal_alpha
# 1 1 C 1 0.09472595 0.06863017
# 2 2 C 1 0.04895754 NA
# 3 3 C 1 0.06863017 NA
# 4 4 C 1 0.07546479 NA
# 5 5 C 1 0.07082198 NA
# 6 6 C 1 0.06441000 NA