我已经看到一些只使用两个变量来做这个的例子,但是我无法弄清楚如何使用它来处理我的三个变量(或者如果它可以)。我有3个变量,每个变量有2-3个数据点 - 它相当于一个3x3x2的受试者内部ANOVA。
我一直在研究重塑的许多例子,以及融化和colsplit,但无法找出适用于我的数据的解决方案。我知道如果我只有三个级别(或三个时间点)的变量Context,我可以让它工作,但是有三个不同的变量都有不同的级别可能吗?
答案 0 :(得分:0)
这可能不是最有效的方式,但它有效。
library(reshape2)
library(dplyr)
# create example dataset
my_df = data.frame(Subj_No = 314:318,
Context1_Entropy1_Dist1 = rep(1, 5),
Context1_Entropy2_Dist1 = rep(2, 5),
Context1_Entropy1_Dist2 = rep(3, 5),
Context1_Entropy2_Dist2 = rep(4, 5),
Context2_Entropy1_Dist1 = rep(5, 5),
Context2_Entropy2_Dist1 = rep(6, 5),
Context2_Entropy1_Dist2 = rep(7, 5),
Context2_Entropy2_Dist2 = rep(8, 5),
Context3_Entropy3_Dist2 = rep(9, 5),
Context3_Entropy3_Dist1 = rep(10, 5))
# melt data from wide to long form
my_df = melt(my_df, id.vars = "Subj_No", variable.name = "Group",
value.name = "Value")
# convert Group column to character
my_df$Group = as.character(my_df$Group)
# split group into three separate groups
groups = strsplit(my_df$Group, "_") %>%
unlist() %>%
matrix(ncol = 3, byrow = TRUE) %>%
data.frame(stringsAsFactors = TRUE)
这部分是将Group列分为三个变量,Context,Entropy和Dist,分隔符为“_”,unlist,逐行存储,并转换为data.frame。
# some further processing
names(groups) = c("Context", "Entropy", "Dist")
levels(groups$Context) = 1:3
levels(groups$Entropy) = 1:3
levels(groups$Dist) = 1:2
Releveling是可选的,但我认为你可以更容易用数字来引用组,而不是像“Context1”或“Entropy2”那样。
# Combine the new groups with original df and drop Groups col
my_df = cbind(my_df, groups) %>% mutate(Group = NULL)
最后一个mutate
函数删除了Group变量。
我希望这就是你想要的!