【发布时间】:2013-11-17 15:56:32
【问题描述】:
当使用.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),但它似乎也只是乘以第一个 @987654330仅限@ 列。我做错了吗?
.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’
【问题讨论】:
-
这只是玩玩还是你有重复名字的原因?如果是后者,请为 Arun 提到的帖子投稿。
-
@eddi 回复this question
标签: r syntax data.table