【问题标题】:melting multiple spans of variables熔化多个变量跨度
【发布时间】:2012-10-01 20:35:54
【问题描述】:

(仍然)是 r 的新手,对于如何完成数据的多次融合非常困惑。这是一个子集:

df <- structure(list(Subject = c(101L, 101L, 101L, 102L, 102L, 102L
), Condition = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("apass", 
"vpas"), class = "factor"), FreqCode = structure(c(1L, 1L, 1L, 
2L, 2L, 2L), .Label = c("LessVerbal", "MoreVerbal"), class = "factor"), 
Item = c(1L, 4L, 7L, 1L, 4L, 7L), Len = c(80L, 68L, 85L, 
68L, 85L, 79L), R1_1.RT = c(237L, 203L, 207L, 336L, 487L, 
340L), R1_2.RT = c(177L, 225L, 162L, 634L, 590L, 347L), R1_3.RT = c(200L, 
226L, 212L, 707L, 653L, 379L), R1.RT = c(614L, 654L, 581L, 
1677L, 1730L, 1066L), R1_1 = structure(c(1L, 1L, 1L, 1L, 
1L, 1L), .Label = "The", class = "factor"), R1_2 = structure(c(3L, 
1L, 2L, 1L, 2L, 4L), .Label = c("antique", "course", "new", 
"road"), class = "factor"), R1_3 = structure(c(4L, 1L, 2L, 
1L, 2L, 3L), .Label = c("car", "materials", "surfaces", "technology"
), class = "factor"), R1 = structure(c(3L, 1L, 2L, 1L, 2L, 
4L), .Label = c("The antique car", "The course materials", 
"The new technology", "The road surfaces"), class = "factor")), .Names = c("Subject", 
"Condition", "FreqCode", "Item", "Len", "R1_1.RT", "R1_2.RT", 
"R1_3.RT", "R1.RT", "R1_1", "R1_2", "R1_3", "R1"), class = "data.frame", row.names =  
c(NA, 
-6L))

我的目标是获得(部分)如下所示的输出:

Region RT WordRegion Word
R1_1.RT 237 R1_1 the
...
R1_2.RT 177 R1_2 new
...

编辑:以“.RT”结尾的变量(例如,R1_1.RT)是区域名称,将被融合到区域列中。以数字结尾的变量(例如,R1_1)与区域名称及其相关值完全对应。我希望它们与区域名称一起融合,以便我可以根据区域列分析它们

在代码的第一部分,我将所有值融合到一个 Region 列中,并将值更改为 RT。这似乎工作正常:

#long transform (with individual regions at end)
SmallMelt1 = melt(df, measure.vars = c("R1_1.RT", "R1_2.RT", "R1_3.RT", "R1.RT"), var = "Region")
#change newly created column name to "RT" (note:you have to change the number in [] to match your data)
colnames(SmallMelt1)[11 ] <- "RT"

但我不知道如何同时融合另一个变量跨度,以便它们与第一个跨度垂直排列。我想做这样的事情,在第一次融化之后,但它不起作用:

#Second Melt for region names (doesn't work)
SmallMelt2 = melt(SmallMelt1, measure.vars = c("R1_1", "R1_2", "R1_3", "R1"), var = "WordRegion")

#Change name to Word
colnames(SmallMelt2)[9] <- "Word" #add col number for "value" here

如果您需要任何说明,请告诉我。我希望有人可以提供帮助...在此先感谢 - DT

【问题讨论】:

  • 很难按照你的需要去做。你能把数据集做得更小(不仅仅是更少的行,而是更少的列)并给我们一个更短的例子吗?
  • 当我创建您的数据并运行您的命令时,SmallMelt1 是 132 个 obs 和 34 个变量,而 SmallMelt2 是 2904 个 obs 和 14 个变量。如果您得到 68 个变量,则说明有问题。我在包重塑中使用功能融化。最后四列看起来就像你的例子。
  • 嗨。为混乱的数据道歉。我认为现在更容易阅读。以“.RT”结尾的变量(例如,R1_1.RT)是区域名称,将被融合到区域列中。以数字结尾的变量(例如,R1_1)与区域名称及其相关值完全对应。我希望它们与区域名称一起融合,以便我可以根据区域列分析它们。我也在上面添加了这个注释。这更清楚吗?谢谢
  • @dcarlson。我认为在新输出中您会看到 WordRegion 列与 Region 列不对齐。例如,R1_1 延伸超过 R1_1.RT。谢谢 - DT
  • 我还没有解决这个问题......有什么建议吗?

标签: r


【解决方案1】:

所以,在咨询了名单外的人之后,我找到了解决方案。我的错误是我试图在第一步的输出上运行第二步。通过在原始数据上独立运行这两个步骤然后连接,我得到了正确的结果。

SmallMelt1 = melt(df, measure.vars = c("R1_1.RT", "R1_2.RT", "R1_3.RT", "R1.RT"), var =   "Region")
SmallMelt2 = melt(df, measure.vars = c("R1_1", "R1_2", "R1_3", "R1"), var = "WordRegion")
SmallMelt3=cbind(SmallMelt1,SmallMelt2[,11])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2010-12-05
    • 2019-12-17
    • 2018-01-21
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多