3

.SDの列のサブセットに関数を適用するために使用する場合、dt列名が重複している状況を処理する正しい方法を見つけることができないようです...

#  Make some data
set.seed(123)
dt <- data.table( matrix( sample(6,16,repl=T) , 4 ) )
setnames(dt , rep( letters[1:2] , 2 ) )
#   a b a b
#1: 2 6 4 5
#2: 5 1 3 4
#3: 3 4 6 1
#4: 6 6 3 6

#  Use .SDcols to multiply both column 'a' specifying them by numeric position
dt[ , lapply( .SD , `*`  , 2 ) , .SDcols = which( names(dt) %in% "a" ) ]
#    a  a
#1:  4  4
#2: 10 10
#3:  6  6
#4: 12 12

が列名の文字ベクトルであるときに動作させることができなかった.SDcolsので、数値位置を試しwhich( names(dt) %in% "a" )ました(ベクトルを与えます)が、最初の列のみ[1] 1 3を乗算するだけのようです。a私は何か間違ったことをしていますか?

.SDcols 高度。.SD に含まれる x の列を指定します。文字列名または数値位置の場合があります。

これらも上記と同じ結果を返しました...

dt[ , lapply( .SD ,function(x) x*2 ) , .SDcols = which( names(dt) %in% "a" ) ]
dt[ , lapply( .SD ,function(x) x*2 ) , .SDcols = c(1,3) ]

packageVersion("data.table")
#[1] ‘1.8.11’
4

2 に答える 2

1

これはどう

dt[, "a"] * 2
##    a a.1
## 1  4   8
## 2 10   6
## 3  6  12
## 4 12   6

より詳細な議論のために

https://chat.stackoverflow.com/transcript/message/12783493#12783493

于 2013-11-06T12:11:23.107 に答える