2016-06-17 3 views
2

reshape2::melt을 사용하여 long-form 데이터 프레임에 시변 예측기를 추가하려고하지만 더 빠른 방법이 있는지 궁금합니다.reshape2를 사용하여 wide-long-form에서 두 세트의 열을 녹이는 것

다음은 와이드 형식의 완구 데이터입니다. 다른 방문/시간 지점에서 취해진 결과 변수 (session1, session2 및 session3)의 세 가지 측정 값이 있습니다. 이 세 방문 사이의 기간은 각 참가자마다 다르므로 궁극적으로이 차이를 모델로 분석하고 싶습니다.

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 

같은 opertation의 일종을 수행하지 않고 모두를 할 수 없어 궁극적으로 나는이

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

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

dfLong 
같은 것을 찾기 위해 dataframe 싶습니다

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으로 되돌릴 수 있습니다.