替换数据表

时间:2017-06-04 10:58:57

标签: r data.table

我在this帖子中发现了如何替换数据框所有列中数字的出现次数(例如,将所有4替换为10)在所有列中):DF[DF == 4] <- 10。使用数据表,可以以完全相同的方式实现相同的结果:DT[DT == 4] <- 10

但是,如果我想应用此修改但仅应用于数据表中的特定列,无论这些列是按位置指定(例如2:4)还是通过姓名(例如c("V2", "V3", "V4"))?

我倾向于采用“优雅”的解决方案而不是每列的迭代。

1 个答案:

答案 0 :(得分:3)

我们可以使用效率更高的set

for(j in 2:4) {
  set(DT, i = which(DT[[j]]==4), j=j, value = 10)
 }
DT
#   V1 V2 V3 V4
#1:  A  2  2 10
#2:  B  1 10 10
#3:  C  3 10  3
#4:  D  3  2 10
#5:  E  3  3  3
#6:  F 10  3  3

以上也可以使用列名来完成

for(j in names(DT)[2:4]){
   set(DT, i = which(DT[[j]]==4), j=j, value = 10)
 }

或者另一种选择是使用感兴趣的列(数字索引或列名称)指定.SDcols,循环遍历Data.table的子集(.SD),{{1将值4到10并将输出(replace)分配回感兴趣的列

:=

或使用列名

DT[, (2:4) := lapply(.SD, function(x) replace(x, x==4, 10)), .SDcols = 2:4]

数据

DT[, (names(DT)[2:4]) := lapply(.SD, function(x) replace(x, x==4, 10)), 
      .SDcols = names(DT)[2:4]]