2016-06-17 8 views
2

reshape2::meltを使用してロングフォームのデータフレームに時変予測子を追加しようとしていますが、もっと速い方法があるかどうかは疑問でした。reshape2を使用してワイドからロングフォームの2つのセットを溶かす

ここは、ワイドフォームのおもちゃデータです。結果変数(セッション1、セッション2、およびセッション3)の3つの測定値が、異なる訪問/時点で測定されます。これらの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$time <- rep(c("time1", "time2", "time3"), each = 10) 

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

dfLong 
のようなものを探すためにデータフレームをご希望の二回溶融を行うと、この

dfLong$timeOut <- dfLong2$timeOut 

ようopertationのいくつかの並べ替えを行うことなく、両方を行うことはできません

2つを溶かす方法はありますか列のを一度に設定しますか?あなたが今data.tablesと連携する方法を学習したくない場合は

+4

'reshape(df、dir = 'long'、varying = lapply(c( 'セッション'、 '時間')、grep、names(df))) ' – rawr

+2

http://stackoverflow.com/questions/37756389/r-convert-multiple-columns-into-single-columnまたはhttp://stackoverflow.com/questions/12466493/mapping-multiple-sets-of-columns-into-single-column-with-reshape-melt-recast -に – rawr

答えて

3

我々はdata.table

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

あなたはsetDF(res)できdata.frameに戻すために使用することができます。

関連する問題