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-組み合わせに対してこれを行います。オンライン検索に適した言葉がわからない。



reshape2R のパッケージを調べる必要があります。また、dput2つのサンプルデータフレームに役立つ場合があります。1つは入力、もう1つは出力です。
ザック

私は答えを提供しましたが、これは統計的な質問よりもRプログラミングの質問の方が多いと思います。
ガラ

答えてくれて、質問の書式設定を手伝ってくれたガエルに感謝します。
ジュハマッティ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、あなたは素晴らしいです!
クリス

15

reshapeパッケージのuntable関数を使用できます。

上記のdfを指定(@GaëlLauransによる)

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

そしてuncounttidyrこれからは上記と同じ結果が得られます。

library(tidyr)
df %>% uncount(Count)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.