수색…


통사론

  • 용융 상태로 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 매개 변수를 열 이름과 함께 사용하십시오.

작업이 각 셀에 값 목록을 생성하면 dcastfun.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 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow