根据条件查找data.table列的平均值并用该平均值替换其他值

问题描述:

如何查找条目不是data.table的-1的列的平均值? 列的名称存储在一个变量中。另外如何将获得的平均值分配为条目为-1的值。对于data.frame相应的代码是:根据条件查找data.table列的平均值并用该平均值替换其他值

col = "col_1" 
mean_value = df[ df[,col]!=-1, col ] 
df[ df[,col]==-1, col ] = mean_value 

样本数据:

dt <- setDT(data.frame(col_1=c(-1,0,1,2,3))) 

get()eval()尝试这种情况:

require(data.table) 

mean_value <- mean(dt[get(col)!=-1,get(col)],na.rm=TRUE) 

dt[get(col)==-1,eval(col):=mean_value] 

输出:

col_1 
1: 1.5 
2: 0.0 
3: 1.0 
4: 2.0 
5: 3.0 
+0

谢谢,但我想在data.table上执行它们 –

+0

如何为条目赋值!= -1 ??? –

+0

@melwin_jose - 没关系,没问题;看到上面的编辑。 – www

使用只有D ata.table

dt <- setDT(data.frame(col_1=c(-1,0,1,2,3))) 
col = names(dt) 
mean_value<-dt [ ! .(-1), lapply(.SD,mean), .SDcols = col,on=col] 
dt[.(-1),(col):=mean_value,on=col]