「id」でグループ化し、いくつかの算術関数を最後の 4 つの列に (グループごとに) 適用し、結果を含む df に新しい行を追加するにはどうすればよいですか。以下に、5 つのサンプル (id) と 8 つの列を含む例を示します。
d1 d2 id type treat v1_gm v2_pct v3_pct
1 info info 1 leaf NA 0.2 70 90
2 info info 1 flower A 0.5 80 80
3 info info 2 leaf NA 0.4 65 80
4 info info 2 flower A 0.1 90 90
5 info info 3 leaf NA 0.6 55 80
6 info info 3 stem A 0.3 80 30
7 info info 4 leaf NA 0.6 30 40
8 info info 4 flower A 0.7 75 75
9 info info 5 leaf/stem NA 0.8 80 75
再現可能な例:
df <- data.frame(matrix(NA, nrow = 9, ncol = 8), row.names=NULL)
colnames(df) <- c("d1","d2","id","type","treat","v1_gm","v2_pct","v3_pct")
df$d1 <- "info"
df$d2 <- "info"
id <- c(1,1,2,2,3,3,4,4,5)
df$id <- c(1,1,2,2,3,3,4,4,5)
df$type <- c("leaf","flower","leaf","flower","leaf","stem","leaf","flower","leaf/stem")
df$treat <- c(NA,"A",NA,"A",NA,"A",NA,"A",NA)
df$v1_gm <- c(0.2,0.5,0.4,0.1,0.6,0.3,0.6,0.7,0.8)
df$v2_pct <- c(70,80,65,90,55,80,30,75,80)
df$v3_pct <- c(90,80,80,90,80,30,40,75,75)
結果テーブルは次のようになります。行 3、6、9、および 13 は、結果を含む新しい行です。新しい行は、テーブルの最後に追加するか、tmp df に入れて後で rbind を使用して追加することができます (どちらの方法もわかりません)。グループ変数は列「id」です。関数 sum は「v1_gm」に使用されます。関数 "mean" は複数の連続する列 (ここでは "v1_pct" と "v3_pct") に使用され、名前で呼び出す必要があります (例: v1_pct:v3_pct)。新しい行の「type」の値は、グループ行の「type」から連結されます。「d1」と「d2」は、treat=="A" のグループ行から単純にコピーされ、新しい行の「treat」は単純にコピーされます。行には値「cmb」が割り当てられます。
d1 d2 id type treat v1_gm v2_pct v3_pct
1 info info 1 leaf NA 0.2 70 90
2 info info 1 flower A 0.5 80 80
3 info info 1 leaf/flower cmb 0.7 75 85
4 info info 2 leaf NA 0.4 65 80
5 info info 2 flower A 0.1 90 90
6 info info 2 leaf/flower cmb 0.5 77.5 85
7 info info 3 leaf NA 0.6 55 80
8 info info 3 stem A 0.3 80 30
9 info info 3 leaf/stem cmb 0.9 67.5 55
10 info info 4 leaf NA 0.6 30 40
11 info info 4 flower A 0.7 75 75
13 info info 4 leaf/flower cmb 1.3 52.5 57.5
14 info info 5 leaf/stem NA 0.8 80 75