【问题标题】:Finding mean of a column of a data.table based on condition & replace other values with that mean根据条件查找 data.table 列的平均值并用该平均值替换其他值
【发布时间】:2017-10-05 02:55:18
【问题描述】:

如何找到条目不是 data.table 的 -1 的列的平均值? 列的名称存储在变量中。以及如何将获得的平均值分配为条目为 -1 的值。 data.frame 对应的代码是:

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)))

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    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
    

    【讨论】:

    • @melwin_jose - 好的,没问题;请参阅上面的编辑。
    • eval() 不一定需要;使用 dt[get(col) == -1, (col) := mean_value] 也可以
    • @Jaap - 感谢您的提示。我也是这么想的。我实际上是第一次尝试 (col),但由于某种原因,仅使用 (col) 会产生错误。所以我切换到更明确的版本 eval(col)。
    【解决方案2】:

    仅使用 Data.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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2013-01-13
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多