5

これはおそらく非常に単純ですが、ランダムな列の選択に基づいていくつかのデータ (平均と中央値) を要約し、別の列でグループ化できるようにしたいと考えています。

下記を参照してください:

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
ww <- sample(c("y","v"),1)
DT[,list(avg=mean(ww),med=median(ww)),by="x"]
   x avg med
1: a  NA   y
2: b  NA   y
3: c  NA   y
Warning messages:
1: In `[.data.table`(DT, , list(avg = mean(ww), med = median(ww)),  :
  argument is not numeric or logical: returning NA
2: In `[.data.table`(DT, , list(avg = mean(ww), med = median(ww)),  :
  argument is not numeric or logical: returning NA
3: In `[.data.table`(DT, , list(avg = mean(ww), med = median(ww)),  :
 argument is not numeric or logical: returning NA

たとえば、ww がたまたま等しい場合"v"、次の出力が期待されます

   x avg med
1: a   2   2  
2: b   5   5
3: c   8   8

調整する必要があるのは構文だけだと思いますが、調整方法がわかりません...どんな助けでも大歓迎です...

4

1 に答える 1

6

使用する必要がありますget

> DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
> ww <- sample(c("y","v"),1)
> DT[,list(avg=mean(get(ww)),med=median(get(ww))),by="x"]
   x      avg med
1: a 3.333333   3
2: b 3.333333   3
3: c 3.333333   3
> ww
[1] "y"
于 2013-08-26T16:54:55.273 に答える