이것은 Stata가 한 단계로 처리하는 데이터 분석의 기본 문제입니다.여러 변수와 시간이 일정하지 않은 와이드에서 패널로 데이터 프레임 변경
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
s.t. :
은 2000 년과 2005 년 (X1, X2) 시간 불변 데이터 (X0)와 시간 변화 데이터를 다양한 데이터 프레임을 생성 subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
내가 reshape
s.t.하여이 작업을 수행 할 수 있습니다 : 데이터는 다음과 같습니다 있도록
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
나는 패널처럼 형성 할
d2 <-reshape(d1,
idvar="subject",
varying=list(c("x1_2000","x1_2005"),
c("x2_2000","x2_2005")),
v.names=c("x1","x2"),
times = c(2000,2005),
direction = "long",
sep= "_")
내 관심사는 수십 개의 변수가있을 때 위의 명령이 매우 길어지는 것입니다. stata
에서 하나는 단순히 입력합니다 : R 이러한 간단한 해결책은
reshape long x1 x2, i(subject) j(year)
있습니까?
library(reshape2)
library(stringr)
# it is always useful to start with melt
d2 <- melt(d1, id=c("subject", "x0"))
# redefine the time and x1, x2, ... separately
d2 <- transform(d2, time = str_replace(variable, "^.*_", ""),
variable = str_replace(variable, "_.*$", ""))
# finally, cast as you want
d3 <- dcast(d2, subject+x0+time~variable)
이제 당신도 지정 X1과 X2가 필요하지 않습니다 :
니스! 하지만 변수 이름이 _sample_1_2000_이라고하면 어떻게됩니까? 'sep ='옵션으로 더 많은 spjhistic을 만들 수 있습니까? – Fred
@Fred,'sep' 대신'split' 인수를 사용하십시오. 즉,'reshape (d1, dir = "long", varying = 3 : 6, split = list (regexp = "_2", include = TRUE)) 이 경우를''reshape (setNames (d1, sub ("sample_", "", names (d1))), dir = "long", varying = 3 : 6, sep = "_")' –