【问题标题】:Melting two sets of columns from wide- to long-form using reshape2 [duplicate]使用 reshape2 将两组列从宽型熔化为长型
【发布时间】:2016-10-19 11:47:12
【问题描述】:

我正在尝试使用 reshape2::melt 将时变预测器添加到长格式数据帧,但我想知道是否有更快的方法来做到这一点。

这里是宽格式的玩具数据。在不同的访问/时间点对结果变量(会话 1、会话 2 和会话 3)进行了三种测量。这三个访问之间的持续时间因每个参与者而异,最终我想将这些差异纳入模型。

id <- 1:10
group <- rep(c("A", "B"), times = 5)
session1 <- rnorm(10, 5, 1)
session2 <- rnorm(10, 3, 1)
session3 <- rnorm(10, 7, 2)
time1 <- rep(0, 10)
time2 <- rnorm(10, 24, 0.5)
time3 <- rnorm(10, 48, 0.5)

df <- data.frame(id, group, session1, session2, session3, time1, time2, time3)

现在我想转换成一个长格式的数据框。我使用reshape2::melt。我可以像这样围绕分数创建这个:

library(reshape2)
dfLong <- melt(df, measure.vars = c("session1", "session2", "session3"), var = "session", value.name = "score")

或者我可以围绕时间值创建它。

dfLong2 <- melt(df, measure.vars = c("time1", "time2", "time3"), var = "time", value.name = "timeOut")

但是如果不进行两次熔化并执行某种类似这样的操作,我就不能同时做到这两点

dfLong$timeOut <- dfLong2$timeOut

最终我希望数据框看起来像这样

dfLong$time <- rep(c("time1", "time2", "time3"), each = 10)

dfLong <- dfLong[,which(names(dfLong) %in% c("id", "group", "time", "session", "score", "timeOut"))]

dfLong

有什么方法可以同时融化两列

【问题讨论】:

标签: r reshape2 melt


【解决方案1】:

我们可以使用data.table

library(data.table)
res = melt(setDT(df), measure = patterns("^session", "^time"), 
                           value.name = c("session", "time"))

如果您现在不想学习如何使用 data.tables,可以setDF(res) 恢复为 data.frame。

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2016-05-09
    • 1970-01-01
    • 2023-03-24
    • 2017-07-31
    • 2016-12-21
    • 1970-01-01
    • 2010-12-05
    • 2020-10-11
    相关资源
    最近更新 更多