넓은 형식 또는 긴 형식의 데이터를 가질 수 있습니다. 형식에 따라 사용 가능한 방법이 다르기 때문에 이것은 매우 중요한 것입니다. 나는 당신이 일을 알고 melt()
및 cast()
모양 변경 패키지,하지만 난하지 않는 것이 몇 가지가 보인다.
누군가 당신이 어떻게 이것을 간단한 개요를 줄 수 있습니까?
넓은 형식 또는 긴 형식의 데이터를 가질 수 있습니다. 형식에 따라 사용 가능한 방법이 다르기 때문에 이것은 매우 중요한 것입니다. 나는 당신이 일을 알고 melt()
및 cast()
모양 변경 패키지,하지만 난하지 않는 것이 몇 가지가 보인다.
누군가 당신이 어떻게 이것을 간단한 개요를 줄 수 있습니까?
답변:
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)
, 집계 기능이 없으면 어떻게됩니까?
?dcast
이 내용을 알려줄 내용을 읽으십시오 (arguments에 대한 세부 사항 참조 fun.aggregate
).
당신은 사용할 필요가 없습니다 melt
및 cast
.
데이터 재구성은 많은 방법으로 수행 될 수 있습니다. recast
with와 함께 사용 하는 인용의 특정 예에서 작업은 자체적으로 훌륭 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
작동하는지, 원하는 경우 자신의 함수를 작성하는 방법을 쉽게 알 수 있습니다.
reshape2 위키를 참조하십시오 . 예상대로 더 많은 예제를 제공합니다.
data.table
여기에 더 효율적이고 광범위한 형태 변경 방법에 대한 언급이 없다는 것을 알기 때문에 비슷한 질문에 대해 ZachOverrover에 대한 Zach / Arun의 탁월한 답변을 추가 의견없이 게시하고 있습니다.
특히 data.table
GitHub 페이지 에는 멋진 비네팅이 있습니다.
https://github.com/Rdatatable/data.table/wiki/Getting-started