如何在rdatatable的'i'中传递名称向量? 库(data.table) dt=原始数据表(mtcars)
假设我想用零替换变量的值,如果值小于变量的平均值。我想对一组变量这样做 这是如何在rdatatable的'i'中传递名称向量? 库(data.table) dt=原始数据表(mtcars),r,data.table,R,Data.table,假设我想用零替换变量的值,如果值小于变量的平均值。我想对一组变量这样做 这是base-r方式: for(c中的v('mpg','cyl','disp','hp','drat')){ dt[dt[[v]] 3: 22.8 0 0.0 0 3.85 2.320 18.61 1 1 4 1 #> 4: 21.4 0 258.0 0 0.00 3.215 19.44 1 0 3 1 #> 5: 0.0 8 360.0 175 0.00 3.
base-r
方式:
for(c中的v('mpg','cyl','disp','hp','drat')){
dt[dt[[v]]<平均值(dt[[v]]),(v):=0]
}
然而,我正在寻找一种原生的data.table
方法(如果有的话)。
如何告诉data.table
将v
视为变量名称,而不是dt
中的变量
这正是我所想的:
for(c中的v('mpg','cyl','disp','hp','drat')){
dt[v<平均值(v),(v):=0]
}
这是在数据中执行此操作的一种方法。表
:
库(data.table)
dt 1:21.03.902.62016.46014
#> 2: 21.0 0 0.0 0 3.90 2.875 17.02 0 1 4 4
#> 3: 22.8 0 0.0 0 3.85 2.320 18.61 1 1 4 1
#> 4: 21.4 0 258.0 0 0.00 3.215 19.44 1 0 3 1
#> 5: 0.0 8 360.0 175 0.00 3.440 17.02 0 0 3 2
#> 6: 0.0 0 0.0 0 0.00 3.460 20.22 1 0 3 1
#> 7: 0.0 8 360.0 245 0.00 3.570 15.84 0 0 3 4
#> 8: 24.4 0 0.0 0 3.69 3.190 20.00 1 0 4 2
#> 9: 22.8 0 0.0 0 3.92 3.150 22.90 1 0 4 2
#> 10: 0.0 0 0.0 0 3.92 3.440 18.30 1 0 4 4
#> 11: 0.0 0 0.0 0 3.92 3.440 18.90 1 0 4 4
#> 12: 0.0 8 275.8 180 0.00 4.070 17.40 0 0 3 3
#> 13: 0.0 8 275.8 180 0.00 3.730 17.60 0 0 3 3
#> 14: 0.0 8 275.8 180 0.00 3.780 18.00 0 0 3 3
#> 15: 0.0 8 472.0 205 0.00 5.250 17.98 0 0 3 4
#> 16: 0.0 8 460.0 215 0.00 5.424 17.82 0 0 3 4
#> 17: 0.0 8 440.0 230 0.00 5.345 17.42 0 0 3 4
#> 18: 32.4 0 0.0 0 4.08 2.200 19.47 1 1 4 1
#> 19: 30.4 0 0.0 0 4.93 1.615 18.52 1 1 4 2
#> 20: 33.9 0 0.0 0 4.22 1.835 19.90 1 1 4 1
#> 21: 21.5 0 0.0 0 3.70 2.465 20.01 1 0 3 1
#> 22: 0.0 8 318.0 150 0.00 3.520 16.87 0 0 3 2
#> 23: 0.0 8 304.0 150 0.00 3.435 17.30 0 0 3 2
#> 24: 0.0 8 350.0 245 3.73 3.840 15.41 0 0 3 4
#> 25: 0.0 8 400.0 175 0.00 3.845 17.05 0 0 3 2
#> 26: 27.3 0 0.0 0 4.08 1.935 18.90 1 1 4 1
#> 27: 26.0 0 0.0 0 4.43 2.140 16.70 0 1 5 2
#> 28: 30.4 0 0.0 0 3.77 1.513 16.90 1 1 5 2
#> 29: 0.0 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#> 30: 0.0 0 0.0 175 3.62 2.770 15.50 0 1 5 6
#> 31: 0.0 8 301.0 335 0.00 3.570 14.60 0 1 5 8
#> 32: 21.4 0 0.0 0 4.11 2.780 18.60 1 1 4 2
#>mpg气缸显示hp drat wt qsec与am齿轮carb
由(v0.3.0)创建于2021-04-05这是在
数据中执行此操作的一种方法。表:
库(data.table)
dt 1:21.03.902.62016.46014
#> 2: 21.0 0 0.0 0 3.90 2.875 17.02 0 1 4 4
#> 3: 22.8 0 0.0 0 3.85 2.320 18.61 1 1 4 1
#> 4: 21.4 0 258.0 0 0.00 3.215 19.44 1 0 3 1
#> 5: 0.0 8 360.0 175 0.00 3.440 17.02 0 0 3 2
#> 6: 0.0 0 0.0 0 0.00 3.460 20.22 1 0 3 1
#> 7: 0.0 8 360.0 245 0.00 3.570 15.84 0 0 3 4
#> 8: 24.4 0 0.0 0 3.69 3.190 20.00 1 0 4 2
#> 9: 22.8 0 0.0 0 3.92 3.150 22.90 1 0 4 2
#> 10: 0.0 0 0.0 0 3.92 3.440 18.30 1 0 4 4
#> 11: 0.0 0 0.0 0 3.92 3.440 18.90 1 0 4 4
#> 12: 0.0 8 275.8 180 0.00 4.070 17.40 0 0 3 3
#> 13: 0.0 8 275.8 180 0.00 3.730 17.60 0 0 3 3
#> 14: 0.0 8 275.8 180 0.00 3.780 18.00 0 0 3 3
#> 15: 0.0 8 472.0 205 0.00 5.250 17.98 0 0 3 4
#> 16: 0.0 8 460.0 215 0.00 5.424 17.82 0 0 3 4
#> 17: 0.0 8 440.0 230 0.00 5.345 17.42 0 0 3 4
#> 18: 32.4 0 0.0 0 4.08 2.200 19.47 1 1 4 1
#> 19: 30.4 0 0.0 0 4.93 1.615 18.52 1 1 4 2
#> 20: 33.9 0 0.0 0 4.22 1.835 19.90 1 1 4 1
#> 21: 21.5 0 0.0 0 3.70 2.465 20.01 1 0 3 1
#> 22: 0.0 8 318.0 150 0.00 3.520 16.87 0 0 3 2
#> 23: 0.0 8 304.0 150 0.00 3.435 17.30 0 0 3 2
#> 24: 0.0 8 350.0 245 3.73 3.840 15.41 0 0 3 4
#> 25: 0.0 8 400.0 175 0.00 3.845 17.05 0 0 3 2
#> 26: 27.3 0 0.0 0 4.08 1.935 18.90 1 1 4 1
#> 27: 26.0 0 0.0 0 4.43 2.140 16.70 0 1 5 2
#> 28: 30.4 0 0.0 0 3.77 1.513 16.90 1 1 5 2
#> 29: 0.0 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#> 30: 0.0 0 0.0 175 3.62 2.770 15.50 0 1 5 6
#> 31: 0.0 8 301.0 335 0.00 3.570 14.60 0 1 5 8
#> 32: 21.4 0 0.0 0 4.11 2.780 18.60 1 1 4 2
#>mpg气缸显示hp drat wt qsec与am齿轮carb
由(v0.3.0)于2021-04-05创建,这里有一个选项:
for (x in c('mpg','cyl', 'disp', 'hp', 'drat')) {
eval(substitute(dt[v < mean(v), v := 0], list(v=as.name(x))))
}
for(c中的x('mpg','cyl','disp','hp','drat')){
评估(替代(dt[v<平均值(v),v:=0],列表(v=as.name(x)))
}
这里有一个选项:
for (x in c('mpg','cyl', 'disp', 'hp', 'drat')) {
eval(substitute(dt[v < mean(v), v := 0], list(v=as.name(x))))
}
for(c中的x('mpg','cyl','disp','hp','drat')){
评估(替代(dt[v<平均值(v),v:=0],列表(v=as.name(x)))
}
我想您正在寻找get
,它允许您使用字符访问变量:
for (v in c('mpg','cyl', 'disp', 'hp', 'drat')) {
dt[get(v) < mean(get(v)), c(v) := 0]
}
您将看到它的行为与使用=F的不同:
dt[,"mpg"] # get a data.table of one column, idem dt[,.(mpg)]
dt[,mpg] # get a vector
var <- "mpg"
dt[,var] #error
dt[,get(var)] # same as dt[,mpg]
dt[,var,with = F] # same as dt[,"mpg"]
dt[,“mpg”]#获取一列的data.table,idem dt[,(mpg)]
dt[,mpg]#得到一个向量
var我猜您正在寻找get
,它允许您使用字符访问变量:
for (v in c('mpg','cyl', 'disp', 'hp', 'drat')) {
dt[get(v) < mean(get(v)), c(v) := 0]
}
您将看到它的行为与使用=F的不同:
dt[,"mpg"] # get a data.table of one column, idem dt[,.(mpg)]
dt[,mpg] # get a vector
var <- "mpg"
dt[,var] #error
dt[,get(var)] # same as dt[,mpg]
dt[,var,with = F] # same as dt[,"mpg"]
dt[,“mpg”]#获取一列的data.table,idem dt[,(mpg)]
dt[,mpg]#得到一个向量
var另一种data.table
方法是使用set()
函数及其i=
参数通过引用进行更新