R Language
data.table로 피벗 및 언 피벗
수색…
통사론
- 용융 상태로
melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value")
-
dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)
전송dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)
매개 변수
매개 변수 | 세부 |
---|---|
id.vars | 으로 말할 melt 유지하기 위해 열을 |
variable.name | 으로 말할 melt 범주 레이블 열을 호출하는 것 |
value.name | 말할 melt 카테고리 레이블과 관련된 값이 열을 호출하는 무엇을 |
value.var | 열에 캐스팅 할 값을 찾을 위치를 dcast . |
공식 | 고유 한 레코드 식별자 (LHS)를 형성하기 위해 보유 할 열과 범주 레이블 (RHS)을 보유하는 열을 dcast |
재미. 집계 | 캐스팅 작업이 각 셀에 값 목록을 생성 할 때 사용할 함수를 지정하십시오. |
비고
모델 또는 시각화를 작성하기 위해 데이터를 조정하는 데 필요한 대부분은 data.table
사용하여 수행 할 수 있습니다. 다른 옵션과 비교하여 data.table
은 속도와 유연성의 이점을 제공합니다.
data.table을 사용하여 표 형식의 피벗 및 피벗 해제 데이터 - I
와이드 형식에서 긴 형식으로 변환
data USArrests
datasets
에서 data USArrests
로드하십시오.
data("USArrests")
head(USArrests)
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
자세한 내용은 ?USArrests
를 사용하십시오. 먼저 data.table
로 변환 data.table
. 상태 이름은 원본 data.frame
행 이름입니다.
library(data.table)
DT <- as.data.table(USArrests, keep.rownames=TRUE)
이것은 넓은 형태의 데이터입니다. 각 변수에 대한 열이 있습니다. 데이터는 정보 손실없이 긴 형식으로 저장할 수도 있습니다. 긴 양식에는 변수 이름을 저장하는 하나의 컬럼이 있습니다. 그런 다음 변수 값에 대해 다른 열이 있습니다. 긴 형태의 USArrests
는 그렇게 보입니다.
State Crime Rate
1: Alabama Murder 13.2
2: Alaska Murder 10.0
3: Arizona Murder 8.1
4: Arkansas Murder 8.8
5: California Murder 9.0
---
196: Virginia Rape 20.7
197: Washington Rape 26.2
198: West Virginia Rape 9.3
199: Wisconsin Rape 10.8
200: Wyoming Rape 15.6
우리는 넓은 형태에서 긴 형태로 전환하기 위해 melt
기능을 사용합니다.
DTm <- melt(DT)
names(DTm) <- c("State", "Crime", "Rate")
기본적으로 melt
는 숫자 데이터가있는 모든 열을 값이있는 변수로 취급합니다. USArrests
에서 변수 UrbanPop
은 국가의 도시 인구 비율을 나타냅니다. 다른 변수 들인 Murder
, Assault
, Rape
과는 다른데, 폭력 범죄는 10 만 명당보고됩니다. UrbanPop
열을 유지하려고한다고 가정합니다. id.vars
를 다음과 같이 설정 id.vars
을 수행합니다.
DTmu <- melt(DT, id.vars=c("rn", "UrbanPop" ),
variable.name='Crime', value.name = "Rate")
names(DTmu)[1] <- "State"
카테고리 이름 (Murder, Assault 등)이 포함 된 열의 이름을 variable.name
하고 값이 value.name
열을 value.name
. 우리의 데이터는 그렇게 보입니다.
State UrbanPop Crime Rate
1: Alabama 58 Murder 13.2
2: Alaska 48 Murder 10.0
3: Arizona 80 Murder 8.1
4: Arkansas 50 Murder 8.8
5: California 91 Murder 9.0
split-apply-combine 스타일 방식으로 요약을 생성하는 것은 쉽습니다. 예를 들어, 주에서 폭력 범죄를 요약하려면?
DTmu[, .(ViolentCrime = sum(Rate)), by=State]
이것은 준다 :
State ViolentCrime
1: Alabama 270.4
2: Alaska 317.5
3: Arizona 333.1
4: Arkansas 218.3
5: California 325.6
6: Colorado 250.6
data.table을 사용하여 피벗 및 피벗 테이블 데이터 - II
긴 형식에서 넓은 형식으로 변환
앞의 예제에서 데이터를 복구하려면 dcast
이렇게 사용 dcast
.
DTc <- dcast(DTmu, State + UrbanPop ~ Crime)
이것은 원래의 넓은 형태의 데이터를 제공합니다.
State UrbanPop Murder Assault Rape
1: Alabama 58 13.2 236 21.2
2: Alaska 48 10.0 263 44.5
3: Arizona 80 8.1 294 31.0
4: Arkansas 50 8.8 190 19.5
5: California 91 9.0 276 40.6
여기서 수식 표기법은 고유 한 레코드 식별자 (LHS)를 구성하는 열과 새 열 이름 (RHS)에 대한 범주 레이블을 포함하는 열을 지정하는 데 사용됩니다. 숫자 값에 사용할 열은 무엇입니까? 기본적으로 dcast
는 수식 사양에서 가져온 숫자 값이있는 첫 번째 열을 사용합니다. 명시 적으로 만들려면 value.var
매개 변수를 열 이름과 함께 사용하십시오.
작업이 각 셀에 값 목록을 생성하면 dcast
는 fun.aggregate
메서드를 사용하여 상황을 처리합니다. 범죄율을 조사 할 때 유사한 도시 인구를 가진 주에 관심이 있다고 가정 해보십시오. Decile
열에 계산 된 정보를 추가합니다.
DTmu[, Decile := cut(UrbanPop, quantile(UrbanPop, probs = seq(0, 1, by=0.1)))]
levels(DTmu$Decile) <- paste0(1:10, "D")
이제 Decile ~ Crime
캐스팅하면 셀당 여러 값이 생성됩니다. fun.aggregate
를 사용하여 어떻게 처리 할지를 결정할 수 있습니다. 텍스트와 숫자 값 모두이 방법으로 처리 할 수 있습니다.
dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)
이것은 준다 :
dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=mean)
이것은 준다 :
State UrbanPop Crime Rate Decile
1: Alabama 58 Murder 13.2 4D
2: Alaska 48 Murder 10.0 2D
3: Arizona 80 Murder 8.1 8D
4: Arkansas 50 Murder 8.8 2D
5: California 91 Murder 9.0 10D
도시 인구의 각 십분에 여러 주가 있습니다. fun.aggregate
를 사용하여 이들을 처리하는 방법을 지정하십시오.
dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)
이것은 다음과 같은 상태에 대한 데이터를 합한 것입니다.
Decile Murder Assault Rape
1: 1D 39.4 808 62.6
2: 2D 35.3 815 94.3
3: 3D 22.6 451 67.7
4: 4D 54.9 898 106.0
5: 5D 42.4 758 107.6