【问题标题】:Reshaping Multiple Variables into Long Form (Narrow Form)将多个变量重塑为长格式(窄格式)
【发布时间】:2017-03-01 13:52:58
【问题描述】:

我已经看到了一些仅使用两个变量执行此操作的示例,但我无法完全弄清楚如何让它与我的三个变量一起使用(或者如果可以的话)。我有 3 个变量,每个变量有 2-3 个数据点——相当于 3x3x2 的受试者内方差分析。


可变标题表示上下文、熵和干扰的级别。

我一直在查看许多 reshape、melt 和 colsplit 的示例,但无法找出适用于我的数据的解决方案。我知道如果我只有三个级别(或三个时间点)的 Context 变量,我可以让它工作,但是三个不同的变量都具有不同的级别是可能的吗?

【问题讨论】:

  • 请勿以图片形式发布您的数据,请了解如何提供reproducible example
  • library(data.table); ?melt.data.tablelibrary(tidyr); ?gather

标签: r reshape reshape2


【解决方案1】:

这可能不是最有效的方法,但它确实有效。

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

重新调平是可选的,但我认为通过数字而不是“Context1”或“Entropy2”之类的方式引用组可能更容易。

# Combine the new groups with original df and drop Groups col
my_df = cbind(my_df, groups) %>% mutate(Group = NULL)

最后一个 mutate 函数删除 Group 变量。

我希望这是你想要的!

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 2013-03-18
    • 2012-09-10
    • 2021-10-26
    相关资源
    最近更新 更多