이전에 재구성 된 인덱스 열에 따라 여러 변수 그룹의 모양을 변경합니다.

필 스프

R에서 data.table을 와이드에서 롱으로 재구성하려고합니다. 감소해야 할 변수 그룹이 여러 개 있지만 한 번에 한 그룹 씩 수행하는 초기 접근 방식은 오류가 발생하기 쉽습니다. 대안. 이 재현 가능한 예 에서는 원본 데이터와 비슷한 방식으로 두 개의 변수 그룹 ( XXYYY)을 만듭니다 .

내 솔루션은이 예제에서 작동하지만 원래 데이터 테이블에는이 코드를 신뢰하기가 쉽지 않은 열이 너무 많습니다. 문제가 내 구현에 있는지 또는 접근 방식 자체에 있는지 확실하지 않습니다 . 가능 하면 간단하게 유지하는 것이 좋습니다.

Q : 이 문제를 해결하는 더 좋은 방법이 있습니까?

예제 데이터

library(data.table)

dt.orig <- data.table(ID= 1:3,
                      a = c("Y", "Y", "N"),
                      b = c("N", "Y", "Y"),
                      XXa=c(101, 102, 103),
                      XXb=c(110, 120, 130),
                      YYYa=c(201, 202, 203),
                      YYYb=c(210, 220, 230))


dt.goal <- data.table(ID=c(1,1,2,2,3,3),
                      obs=c("a", "b"),
                      outcome = c("Y", "N", "Y", "Y", "N", "Y"),
                      XX=c(101, 110, 102, 120, 103, 130),
                      YYY=c(201, 210, 202, 220, 203, 230))

> dt.orig
   ID a b XXa XXb YYYa YYYb
1:  1 Y N 101 110  201  210
2:  2 Y Y 102 120  202  220
3:  3 N Y 103 130  203  230
> dt.goal
   ID obs outcome  XX YYY
1:  1   a       Y 101 201
2:  1   b       N 110 210
3:  2   a       Y 102 202
4:  2   b       Y 120 220
5:  3   a       N 103 203
6:  3   b       Y 130 230

dt.orig원본 데이터를 나타내며 dt.goal제가 달성하고자하는 것입니다. tidyr패키지 비 네트를 따르는 나의 초기 시도는 다음 과 같습니다.

시도 1 : tidyr/dplyr접근

library(tidyr)
library(dplyr)

dt.orig[, .(ID, a, b)] %>%
  pivot_longer(
    cols = c("a", "b"),
    names_to = "obs",
    values_to = "outcome"
  ) %>% data.table -> dt.tidyr1

dt.orig[, .(ID, XXa, XXb, YYYa, YYYb)] %>%
  pivot_longer(
             cols = XXa:YYYb,
             names_to = c(".value", "obs"),
             names_pattern = "(XX|YYY)(.)",
              ) %>% data.table -> dt.tidyr2

dt.tidyr1[, .(ID, obs, outcome)] == dt.goal[, .(ID, obs, outcome)] # test passes
dt.tidyr2[, .(ID, obs, XX, YYY)] == dt.goal[, .(ID, obs, XX, YYY)] # test passes

> merge(dt.tidyr1, dt.tidyr2)
   ID obs outcome  XX YYY
1:  1   a       Y 101 201
2:  1   b       N 110 210
3:  2   a       Y 102 202
4:  2   b       Y 120 220
5:  3   a       N 103 203
6:  3   b       Y 130 230

위의 코드에서 나는 처음에 이름 / 값의 쌍의 생성 obs에서와 결과를 a하고 b. 모든 변수 그룹에는 이름 지정 체계가 포함 a되어 b있으므로이 사실을 사용하여 단일 정규식으로 모든 그룹을 전달할 수 있습니다 .

그런 다음 두 데이터 테이블을 최종 데이터 테이블로 병합하거나 조인 할 수 있습니다.

시도 2 : data.table방법

동일한 원칙에 따라 원본 a와 b를 obs와 결과로 녹이기 시작한 다음 각 var 그룹에 대해 두 번째 단계 (간결성을 위해 여기에 표시되지 않음)를 수행 할 수 있습니다. 이 경우 한 번에 하나의 var 그룹을 녹이는 데 성공 했으므로이 예에서는 먼저 모든 XX를 수행 한 다음 모든 YYY를 수행합니다. 장점 / 단점 : 장점은 프로세스를 완료하기 위해 여러 단계 테이블을 만들 필요가 없다는 것입니다. 단점 : 실제 데이터의 모든 var 그룹을 사용하여이 접근 방식을 완료 할 커피가 충분하지 않습니다 (결과를 신뢰 함).

dt.melt1 <- melt(dt.orig,
                 id.vars = c("ID", "XXa", "XXb", "YYYa", "YYYb"),
                 measure = c("a", "b"),
                 variable.name = "obs",
                 value.name = "outcome")
LRRR

나는 dplyr 버전이 괜찮다고 생각합니다. 열 수를 늘리기 위해 pivot_longer의 정규식을 더 일반적으로 만들 수 있습니다. 또한 두 번째 데이터 프레임을 만들고 병합 할 필요가 없도록 열 a와 b를 목록으로 평면화 할 수 있습니다.

# flatten cols a,b 
outcome <-  c(t(select(dt.orig, c(a, b))))

# pivot longer on regex and add outcome list
dt.orig %>%  
  pivot_longer(-c(ID, a, b), 
               names_to = c(".value", "obs"),
               names_pattern = "(.*)(.)") %>% 
  mutate(outcome = outcome) %>% 
  select(-c(a, b))



     ID obs      XX   YYY outcome
1     1 a       101   201 Y      
2     1 b       110   210 N      
3     2 a       102   202 Y      
4     2 b       120   220 Y      
5     3 a       103   203 N      
6     3 b       130   230 Y      

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

값 다양성에 따른 인덱스의 여러 열 순서

분류에서Dev

pyspark는 그룹화 된 applyInPandas에 여러 열을 추가합니다 (스키마 변경).

분류에서Dev

Pandas는 여러 조건에 따라 여러 열을 변경합니다.

분류에서Dev

제공된 술어에 따라 여러 열의 DataFrame 변경 값

분류에서Dev

Pandas를 사용하여 그룹에 따라 행의 여러 변수를 열로 전치

분류에서Dev

다른 여러 열에 따라 다양한 열 변경-R

분류에서Dev

전달 된 인수 수에 따라 가변적 인 양의 행 실행

분류에서Dev

한 줄에있는 문자열의 양에 따라 확인 된 문자열의 양을 변경

분류에서Dev

전달 된 인수에 따라 배열에 값을 여러 번 삽입

분류에서Dev

열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

분류에서Dev

여러 그룹화 변수로 구분 된 개인에 대해 취한 여러 변수의 ANOVA를 수행하는 방법은 무엇입니까?

분류에서Dev

다른 열의 연결된 데이터가 고유한지 여부에 따라 Excel의 모든 양수 값을 합산하는 방법은 무엇입니까?

분류에서Dev

변수를 확인하고 소속 된 그룹에 따라 그룹화

분류에서Dev

여러 조건에서 그룹화 된 변수의 모든 행에 값 할당

분류에서Dev

그룹화 된 열의 이상 값을 정의 된 zscore에 따라 그룹의 평균으로 바꿉니다.

분류에서Dev

여러 열에 의한 Pandas 그룹은 조건에 따라 다른 열을 평균합니다.

분류에서Dev

다양한 변수에 따라 여러 데이터 세트 생성

분류에서Dev

프로그램 'for 루프'가 한 인스턴스에서 배열의 여러 값을 변경합니다.

분류에서Dev

Powershell XML : 속성의 존재 여부에 따라 값을 얻는 방법이 변경됩니다.

분류에서Dev

bash는 "IFS"변수의 값에 따라 동작을 변경합니다.

분류에서Dev

전달 된 매개 변수에 따라 클래스 속성 값 변경

분류에서Dev

Pandas df는 정수 인덱스 목록에 따라 행과 열을 재정렬합니다.

분류에서Dev

바인딩 된 속성이 Datepicker 날짜 xamarin 양식에 따라 변경되지 않습니다.

분류에서Dev

R Leaflet : 레이어에 여러 그룹을 할당하여 데이터를 필터링하고 표시된 열을 변경합니다.

분류에서Dev

계산 된 옵션에 의해 생성 된 v-for 배열이 변경 될 때 DOM이 그에 따라 변경되지 않습니다.

분류에서Dev

AngularJS-사용자가 로그인했는지 여부에 따라 href 속성을 변경합니까?

분류에서Dev

컴파일러가 생성자 초기화 중에 전달 된 인스턴스 변수와 매개 변수 간의 모호성을 찾지 못합니까?

분류에서Dev

기본 키를 통해 그룹화하고 그룹의 나머지 항목을 모두 그룹화 된 값 목록으로 수집하여 배열의 모든 데이터 항목을 재구성하는 방법은 무엇입니까?

분류에서Dev

여러 조건에 따라 배열의 항목 값을 변경하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    값 다양성에 따른 인덱스의 여러 열 순서

  2. 2

    pyspark는 그룹화 된 applyInPandas에 여러 열을 추가합니다 (스키마 변경).

  3. 3

    Pandas는 여러 조건에 따라 여러 열을 변경합니다.

  4. 4

    제공된 술어에 따라 여러 열의 DataFrame 변경 값

  5. 5

    Pandas를 사용하여 그룹에 따라 행의 여러 변수를 열로 전치

  6. 6

    다른 여러 열에 따라 다양한 열 변경-R

  7. 7

    전달 된 인수 수에 따라 가변적 인 양의 행 실행

  8. 8

    한 줄에있는 문자열의 양에 따라 확인 된 문자열의 양을 변경

  9. 9

    전달 된 인수에 따라 배열에 값을 여러 번 삽입

  10. 10

    열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

  11. 11

    여러 그룹화 변수로 구분 된 개인에 대해 취한 여러 변수의 ANOVA를 수행하는 방법은 무엇입니까?

  12. 12

    다른 열의 연결된 데이터가 고유한지 여부에 따라 Excel의 모든 양수 값을 합산하는 방법은 무엇입니까?

  13. 13

    변수를 확인하고 소속 된 그룹에 따라 그룹화

  14. 14

    여러 조건에서 그룹화 된 변수의 모든 행에 값 할당

  15. 15

    그룹화 된 열의 이상 값을 정의 된 zscore에 따라 그룹의 평균으로 바꿉니다.

  16. 16

    여러 열에 의한 Pandas 그룹은 조건에 따라 다른 열을 평균합니다.

  17. 17

    다양한 변수에 따라 여러 데이터 세트 생성

  18. 18

    프로그램 'for 루프'가 한 인스턴스에서 배열의 여러 값을 변경합니다.

  19. 19

    Powershell XML : 속성의 존재 여부에 따라 값을 얻는 방법이 변경됩니다.

  20. 20

    bash는 "IFS"변수의 값에 따라 동작을 변경합니다.

  21. 21

    전달 된 매개 변수에 따라 클래스 속성 값 변경

  22. 22

    Pandas df는 정수 인덱스 목록에 따라 행과 열을 재정렬합니다.

  23. 23

    바인딩 된 속성이 Datepicker 날짜 xamarin 양식에 따라 변경되지 않습니다.

  24. 24

    R Leaflet : 레이어에 여러 그룹을 할당하여 데이터를 필터링하고 표시된 열을 변경합니다.

  25. 25

    계산 된 옵션에 의해 생성 된 v-for 배열이 변경 될 때 DOM이 그에 따라 변경되지 않습니다.

  26. 26

    AngularJS-사용자가 로그인했는지 여부에 따라 href 속성을 변경합니까?

  27. 27

    컴파일러가 생성자 초기화 중에 전달 된 인스턴스 변수와 매개 변수 간의 모호성을 찾지 못합니까?

  28. 28

    기본 키를 통해 그룹화하고 그룹의 나머지 항목을 모두 그룹화 된 값 목록으로 수집하여 배열의 모든 데이터 항목을 재구성하는 방법은 무엇입니까?

  29. 29

    여러 조건에 따라 배열의 항목 값을 변경하려면 어떻게해야합니까?

뜨겁다태그

보관