SO ユーザーからの複数の提案の後、私は最終的に自分のコードを を使用するように変換しようとしていますdata.table
。
library(data.table)
DT <- data.table(plate = paste0("plate",rep(1:2,each=5)),
id = rep(c("CTRL","CTRL","ID1","ID2","ID3"),2),
val = 1:10)
> DT
plate id val
1: plate1 CTRL 1
2: plate1 CTRL 2
3: plate1 ID1 3
4: plate1 ID2 4
5: plate1 ID3 5
6: plate2 CTRL 6
7: plate2 CTRL 7
8: plate2 ID1 8
9: plate2 ID2 9
10: plate2 ID3 10
私がやりたいのはDT[,val]
、IDが「CTRL」の場合のプレートごとの平均を取ることです。
私は通常aggregate
、データフレームを使用match
して、値を新しい列「ctrl」にマップし直します。
data.table
私が得ることができるパッケージを使用して:
DT[id=="CTRL",ctrl:=mean(val),by=plate]
> DT
plate id val ctrl
1: plate1 CTRL 1 1.5
2: plate1 CTRL 2 1.5
3: plate1 ID1 3 NA
4: plate1 ID2 4 NA
5: plate1 ID3 5 NA
6: plate2 CTRL 6 6.5
7: plate2 CTRL 7 6.5
8: plate2 ID1 8 NA
9: plate2 ID2 9 NA
10: plate2 ID3 10 NA
私が本当に必要なのは:
DT <- data.table(plate = paste0("plate",rep(1:2,each=5)),
id = rep(c("CTRL","CTRL","ID1","ID2","ID3"),2),
val = 1:10,
ctrl = rep(c(1.5,6.5),each=5))
> DT
plate id val ctrl
1: plate1 CTRL 1 1.5
2: plate1 CTRL 2 1.5
3: plate1 ID1 3 1.5
4: plate1 ID2 4 1.5
5: plate1 ID3 5 1.5
6: plate2 CTRL 6 6.5
7: plate2 CTRL 7 6.5
8: plate2 ID1 8 6.5
9: plate2 ID2 9 6.5
10: plate2 ID3 10 6.5
最終的には、より複雑な値の選択を使用したいと思いますが、特定の値を選択し、関数を実行してから、データ フレームを使用してそれらの値を適切な行にマップする方法がわかりません。