R에서 데이터 프레임을 확장하는 방법


15

R로 일부 분석을 수행하는 동안 다음과 같은 문제가 있습니다.

다음과 같은 데이터 프레임이 있습니다.

Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5 
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1

다음과 같이하려면 "확장"해야합니다 (올바른 용어인지 확실하지 않음).

Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B

기타

따라서 Person 1과 A 쌍 (이 예에서는 3)의 값을 가져와 Person 1과 A로 3 개의 행을 작성하고 모든 Person-Group-combination에 대해 3 개의 행을 작성합니다. 온라인 검색을위한 좋은 단어를 찾을 수 없습니다.



reshape2R로 패키지를 탐색해야 합니다. dput두 가지 예제 데이터 프레임 (입력과 출력)이 도움이 될 수 있습니다 .
Zach

나는 대답을 제공했지만 통계 질문보다 R 프로그래밍 질문보다 더 많은 것으로 생각하므로 다른 곳으로 마이그레이션해야 할 수도 있습니다.
Gala

답변과 내 질문의 서식 지정을 도와 준 Gaël에게 감사드립니다.
Juha-Matti S.

답변:


10

그것은 매우 유용한 패키지 동안, 나는 생각 모양 변경이 이 경우에 과잉이다 담당자 일을 할 수 있습니다.

다음은 몇 가지 예제 데이터입니다.

df <- data.frame(
     name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
     group=c("A", "A", "A", "B", "B", "B"),
     count=c(3,1,0,5,0,1))

이제 "확장"하려면 :

expanded <- data.frame(name = rep(df$name, df$count),
                       group = rep(df$group, df$count))

나는 머리 꼭대기의 데이터 프레임에서 직접 작업 할 수있는 방법을 찾을 수 없으므로 각 변수를 개별적으로 작업 한 다음 다시 조립하고 있습니다. 약간 추악하지만 항상 사용하는 것을 돌보는 한 괜찮습니다. 카운트에 동일한 변수.


7
이건 df[rep(seq_len(nrow(df)), df$count), 1:2]어때요?
chl

@chl, 당신은 훌륭합니다!
Chris

15

재구성 패키지에서 untable 기능을 사용할 수 있습니다.

위의 df가 주어지면 (@ Gaël Laurans에 의해)

library(reshape)

expanded<-untable(df[,c(1,2)], num=df[,3])

name group
1   Person 1     A
1.1 Person 1     A
1.2 Person 1     A
2   Person 2     A
4   Person 1     B
4.1 Person 1     B
4.2 Person 1     B
4.3 Person 1     B
4.4 Person 1     B
6   Person 3     B

untable내 의견에서 언급 한 것을 정확하게 수행합니다 :-) 해당 기능을 상기시켜 주셔서 감사합니다!
chl

1

그리고 uncount에서 tidyr지금 상기와 같은 결과를 제공합니다.

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