3

dfフィールドcountを持つデータ フレームがあり、各値が繰り返されるvalue列を持つデータ フレームに変換したいと考えています。valuevaluecount

実際、ループ以外でこれを行う方法がわかりません。plyrまたはreshape2(または両方)を含むソリューションは完全に受け入れられます。

これが私が探しているものの例です:

count value
2     10
1     20

value
10
10
20

フォローアップの質問

value1, value2, value3に基づいて繰り返さなければならない 3 つのフィールドがある場合はどうなりcountますか?

4

2 に答える 2

13

データフレームの名前が dat の場合、これは機能します。

dat[rep(seq_len(dim(dat)[1]), dat$count), 2]

## [1] 10 10 20

投稿したのと同じようにデータフレームとして使用したい場合:

data.frame(dat[rep(seq_len(dim(dat)[1]), dat$count), 2, drop = FALSE], row.names=NULL)

##   value
## 1    10
## 2    10
## 3    20
于 2013-08-03T01:25:19.770 に答える
3

mapplyデータフレームが呼び出されると仮定した場合の解決策は次のdatとおりです。

do.call("c", (mapply(rep, dat$value, dat$count)))

複数の値列がある場合は、試すことができます

v <- do.call("c", (mapply(rep, c(dat$value1, dat$value2, dat$value3), dat$count)))

t(matrix(v, numberofvaluecolumns, byrow=T))

numberofvaluecolumns使用している値列の数だけです。ただし、これは行列を返します。そのため、行列に問題がある場合は注意が必要です。

于 2013-08-03T01:41:57.620 に答える