데이터 프레임을 R의 열로 변환하기 위해 데이터 프레임을 재구성합니다.

StackOverflow https://stackoverflow.com/questions/2404085

  •  18-09-2019
  •  | 
  •  

문제

하나의 특정 열에 특정 값 세트가있는 데이터 프레임이 있습니다 (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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top