1data.frame
人あたりの行数がさまざまです。ある人が 4 行未満の場合は、4 行にしたいと思います。追加の行は、1 人あたりの最後の行の複製にしたいと思います。たとえば、以下のトムです。
このコードを使用して行を繰り返す方法を知っています:
dff <- df[rep(1:nrow(df), each=4), ]
しかし、ここでの問題は、発生回数が 4 回未満の ID の行のみをレプリケートすることについて、私には議論の余地がないことです。
私はこれを試しました:
dff <- ifelse(length(df$noms < 4),
df[rep(1:nrow(df), each=4), ], df) ##doesn't work
使用できると思いますdo.call(rbind, ...)
が、やはり、引数をコードに統合することができません。
これが私が試したことです:
df <- ifelse(length(df$noms<4),
do.call(rbind, by(df, df$noms, rbind, 1:nrow(df))),
df) ## doesn't work
また、何回繰り返すかについての引数を含めることもできませんでした。
noms fruits apple orange kiwi all_comb comb
1 mary apple 1 0 0 1 1
2 mary grape 0 0 0 0 1
3 mary orange 0 1 0 0 1
4 mary apple 1 0 0 1 1
5 john banana 0 0 0 0 1
6 john apple 1 0 0 1 1
7 john apple 1 0 0 1 1
8 john apple 1 0 0 1 1
9 lucy kiwi 0 0 1 0 1
10 lucy orange 0 1 0 0 1
11 lucy apple 1 0 0 1 1
12 lucy berry 0 0 0 0 1
13 tom orange 0 1 0 0 1
望ましい出力
noms fruits apple orange kiwi all_comb comb
1 mary apple 1 0 0 1 1
2 mary grape 0 0 0 0 1
3 mary orange 0 1 0 0 1
4 mary apple 1 0 0 1 1
5 john banana 0 0 0 0 1
6 john apple 1 0 0 1 1
7 john apple 1 0 0 1 1
8 john apple 1 0 0 1 1
9 lucy kiwi 0 0 1 0 1
10 lucy orange 0 1 0 0 1
11 lucy apple 1 0 0 1 1
12 lucy berry 0 0 0 0 1
13 tom orange 0 1 0 0 1
14 tom orange 0 1 0 0 1
15 tom orange 0 1 0 0 1
16 tom orange 0 1 0 0 1
再現可能なデータを次に示します。
noms <- as.character(c('mary', 'mary','mary','mary','john','john','john',
'john','lucy','lucy','lucy','lucy', 'tom'))
fruits <- as.character(c('apple','grape','orange','apple','banana',
'apple','apple','apple','kiwi','orange',
'apple','berry', 'orange'))
df <- data.frame(noms,fruits)