以前にも同様の質問をしましたが、私の説明が不十分だったようです。32 列の data.frame があります。この特定の基準を満たす各行の下に複製行を作成したい
df$resting == "toolong".
DWin からの提案に従って、次のコードを使用してこれを達成しました。
df[ unlist(mapply( rep, rownames(df), 1+(df$resting=="toolong"))) , ]
これで十分に機能しますが、「親」行と新しく作成された重複行の値の一部を変更する必要があります。親行の変数actionとtimeを次のように設定する必要があります。
action <- "for"
time <- 60
重複する行には、変数actionとtimeをに設定する必要があります
action <- "l" # which is what it is already so this can be ignored for now
time <- "parent row time" - 60 # I am unsure how to code this.
以下は、データの構造を示す data.frame の例です (元のデータベースにはさらに多くの列があります)。
id <- c(1,1,1,1,2,2,2,3,3,3)
resting <- c("f","toolong","t","f","f","toolong","t","f","toolong","t")
time <- c(23,145,34,16,17,134,67,89,123,12)
act <- c("f","l","f","d","d","l","f","d","l","d")
df <- data.frame(id, resting, time, act)
最終的な df は次のようになります。
id resting time act
1 1 f 23 f
2 1 toolong 60 for
2.1 1 toolong 85 l
3 1 t 34 f
4 1 f 16 d
5 2 f 17 d
6 2 toolong 60 for
6.1 2 toolong 74 l
7 2 t 67 f
8 3 f 89 d
9 3 toolong 60 for
9.1 3 toolong 63 l
10 3 t 12 d
ありがとう、ティム