R에서 와이드 형식과 긴 형식간에 데이터를 변경하는 방법은 무엇입니까? [닫은]


32

넓은 형식 또는 긴 형식의 데이터를 가질 수 있습니다. 형식에 따라 사용 가능한 방법이 다르기 때문에 이것은 매우 중요한 것입니다. 나는 당신이 일을 알고 melt()cast()모양 변경 패키지,하지만 난하지 않는 것이 몇 가지가 보인다.

누군가 당신이 어떻게 이것을 간단한 개요를 줄 수 있습니까?


달성하고자하는 예를 제시하십시오. 정확히 무엇을 얻지 못합니까?
mpiktas

3
다음은 and 사용 예제가 포함 된 블로그 게시물 입니다 . 와이드 형식에서 긴 형식으로의 변환은 한 단계에서 수행됩니다. 더 특별한 것은 없습니다. meltcast
mpiktas

통계에 오신 것을 환영합니다. 질문에 작은 재현 가능한 데이터 세트를 포함시켜 원하는 것을 설명하는 것이 도움이 될 수 있습니다. 자세한 내용sigmafield.org/2011/01/18/… 를 참조하십시오.
PaulHurleyuk

여러 가지 방법 으로이 SO 질문 을 참조하십시오 .
Axeman

답변:


26

Hadley Wickham의 웹 사이트 에는 현재 Journal of Statistical Software의 패키지에 reshape2대한 문서 링크를 포함 하여 패키지 (현재는 )에 대한 몇 가지 리소스가 있습니다 .

다음은이 논문의 간단한 예입니다.

> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
     subject time age weight height
1 John Smith    1  33     90   1.87
2 Mary Smith    1  NA     NA   1.54

우리는 자료가 넓은 형태임을 주목한다. 긴 형태로 이동하려면, 우리는 할 smiths데이터 프레임 용융를 :

> melt(smiths)
Using subject as id variables
     subject variable value
1 John Smith     time  1.00
2 Mary Smith     time  1.00
3 John Smith      age 33.00
4 Mary Smith      age    NA
5 John Smith   weight 90.00
6 Mary Smith   weight    NA
7 John Smith   height  1.87
8 Mary Smith   height  1.54

melt()변수 중 하나를 id로 어떻게 선택 했는지 주목 하지만 인수를 통해 사용할 변수를 명시 적으로 지정할 수 있습니다 'id'.

> melt(smiths, id = "subject")
     subject variable value
1 John Smith     time  1.00
2 Mary Smith     time  1.00
3 John Smith      age 33.00
4 Mary Smith      age    NA
5 John Smith   weight 90.00
6 Mary Smith   weight    NA
7 John Smith   height  1.87
8 Mary Smith   height  1.54

다음은 또 다른 예입니다 ?cast.

#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)

용융 데이터 프레임을 저장하면 다른 형태로 캐스트 할 수 있습니다 . 새 버전 reshape(호출 reshape2) 기능이있다 acast()dcast()배열 형상 (배열 행렬 벡터) 또는 각각 결과 데이터 프레임을 리턴이. 이러한 함수는 또한 집계 함수 (예 mean():)를 사용하여 용융 된 형태의 데이터 요약을 제공합니다. 예를 들어, 위의 대기 질 예에서 다음과 같이 데이터 세트의 변수에 대한 월별 평균 값을 다양한 형식으로 생성 할 수 있습니다.

> dcast(aqm, month ~ variable, mean)
  month    ozone  solar.r      wind     temp
1     5 23.61538 181.2963 11.622581 65.54839
2     6 29.44444 190.1667 10.266667 79.10000
3     7 59.11538 216.4839  8.941935 83.90323
4     8 59.96154 171.8571  8.793548 83.96774
5     9 31.44828 167.4333 10.180000 76.90000

에 두 가지 주요 기능 만 있습니다 reshape2: melt()acast()dcast()페어링. 이 두 가지 기능에 대한 도움말 페이지의 예를보고 Hadley 웹 사이트 (위의 링크)를 참조하고 언급 한 논문을보십시오. 시작해야합니다.

Hadley의 plyr패키지 를 살펴보면 비슷한 일을 reshape2하지만 훨씬 더 많은 일을 하도록 설계되었습니다.


dcast(aqm, month ~ variable), 집계 기능이 없으면 어떻게됩니까?
qed

@CravingSpirit 각 변수에 대한 관측치 수를 반환합니다. ?dcast이 내용을 알려줄 내용을 읽으십시오 (arguments에 대한 세부 사항 참조 fun.aggregate).
복원 Monica Monica-G. Simpson

8
  • Quick-R 에는 형태 변경 패키지를 사용하는 간단한 예가 있습니다.

  • 와이드 및 롱 포맷 사이를 이동하는 Base R 방식에 대해서는 ?reshape( LINK ) 도 참조하십시오 .


7

당신은 사용할 필요가 없습니다 meltcast.

데이터 재구성은 많은 방법으로 수행 될 수 있습니다. recastwith와 함께 사용 하는 인용의 특정 예에서 작업은 자체적으로 훌륭 aggregate하기 때문에 중복되었습니다 aggregate.

aggregate(cbind(LPMVTUZ, LPMVTVC, LPMVTXC) ~ year, dtm, sum)
# or even briefer by first removing the columns you don't want to use
aggregate(. ~ year, dtm[,-2], sum)

블로그 게시물에서 무엇 melt을하고 있는지 설명하는 방법 이 마음에 듭니다 . 이해하는 사람은 거의 없으며 일단 그것을 본 후에는 어떻게 cast작동하는지, 원하는 경우 자신의 함수를 작성하는 방법을 쉽게 알 수 있습니다.



2

data.table여기에 더 효율적이고 광범위한 형태 변경 방법에 대한 언급이 없다는 것을 알기 때문에 비슷한 질문에 대해 ZachOverrover에 대한 Zach / Arun의 탁월한 답변을 추가 의견없이 게시하고 있습니다.

https://stackoverflow.com/questions/6902087/proper-fastest-way-to-reshape-a-data-table/6913151#6913151

특히 data.tableGitHub 페이지 에는 멋진 비네팅이 있습니다.

https://github.com/Rdatatable/data.table/wiki/Getting-started

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.