데이터 프레임을 R의 열로 변환하기 위해 데이터 프레임을 재구성합니다.
문제
하나의 특정 열에 특정 값 세트가있는 데이터 프레임이 있습니다 (1, 2, ..., 23). 내가하고 싶은 것은이 레이아웃에서 하나로 변환하는 것입니다. 프레임에는 추가 23 (이 경우) 열이 있으며 각 열은 요인 값 중 하나를 나타냅니다. 이 열의 데이터는 특정 행에 주어진 요인 값이 있는지 여부를 나타내는 부울입니다.
소스 프레임 :
ID DATE SECTOR
123 2008-01-01 1
456 2008-01-01 3
789 2008-01-02 5
... <more records with SECTOR values from 1 to 5>
원하는 형식 :
ID DATE SECTOR.1 SECTOR.2 SECTOR.3 SECTOR.4 SECTOR.5
123 2008-01-01 T F F F F
456 2008-01-01 F F T F F
789 2008-01-02 F F F F T
나는 루프에서 그것을하는 데 아무런 문제가 없지만 더 나은 방법이 있기를 바랐다. 지금까지 reshape()
원하는 결과를 얻지 못했습니다. 도움을 주셔서 감사합니다.
해결책
"value"라는 다른 열을 묶고 value = TRUE
.
df <- data.frame(cbind(1:10, 2:11, 1:3))
colnames(df) <- c("ID","DATE","SECTOR")
df <- data.frame(df, value=TRUE)
그런 다음 재편성을하십시오.
reshape(df, idvar=c("ID","DATE"), timevar="SECTOR", direction="wide")
사용의 문제 reshape
기능은 결 측값의 기본값이 NA라는 것입니다 (이 경우 반복하여 False로 교체해야 함).
그렇지 않으면 사용할 수 있습니다 cast
밖으로 reshape
패키지 (예를 들어이 질문을 참조하십시오), 기본값을 설정하십시오 FALSE
.
df.wide <- cast(df, ID + DATE ~ SECTOR, fill=FALSE)
> df.wide
ID DATE 1 2 3
1 1 2 TRUE FALSE FALSE
2 2 3 FALSE TRUE FALSE
3 3 4 FALSE FALSE TRUE
4 4 5 TRUE FALSE FALSE
5 5 6 FALSE TRUE FALSE
6 6 7 FALSE FALSE TRUE
7 7 8 TRUE FALSE FALSE
8 8 9 FALSE TRUE FALSE
9 9 10 FALSE FALSE TRUE
10 10 11 TRUE FALSE FALSE
다른 팁
다음은 사용하는 또 다른 방법입니다 xtabs
더 빠르거나 더 빠르지 않을 수도 있습니다 (누군가가 나에게 알려주는 경우) :
df <- data.frame(cbind(1:12, 2:13, 1:3))
colnames(df) <- c("ID","DATE","SECTOR")
foo <- xtabs(~ paste(ID, DATE) + SECTOR, df)
cbind(t(matrix(as.numeric(unlist(strsplit(rownames(foo), " "))), nrow=2)), foo)
제휴하지 않습니다 StackOverflow