通过regex添加data.table列

jan*_*nyi 2 r data.table

我想添加一个特定的列,data.table并希望通过正则表达式选择列.以下面的例子为例.

library(data.table)
mydt <- data.table(
    id = c(1, 2, 3),
    x_0 = c(1, NA, 0), x_1 = c(2, 4, NA), x_2 = c(3, 5, NA), x_3 = c(NA, 6, NA), 
    y_0 = c(6, NA, 0), y_1 = c(5, 3, NA), y_2 = c(4, 2, NA), y_3 = c(NA, 1, NA)
)

mydt
   id x_0 x_1 x_2 x_3 y_0 y_1 y_2 y_3
1:  1   1   2   3  NA   6   5   4  NA
2:  2  NA   4   5   6  NA   3   2   1
3:  3   0  NA  NA  NA   0  NA  NA  NA
Run Code Online (Sandbox Code Playgroud)

我想添加标记为0的列.因此x_0,y_0我希望有一个新列等于x_0 + y_0,而不是列,所以像这样:

my_preferred_dt
   id x_1 x_2 x_3 y_1 y_2 y_3 new_col
1:  1   2   3  NA   5   4  NA       7
2:  2   4   5   6   3   2   1      NA
3:  3  NA  NA  NA  NA  NA  NA       0
Run Code Online (Sandbox Code Playgroud)

由于我有很多这样的列,我想根据正则表达式("_0$")选择它们.

Cat*_*ath 8

您可以ReduceSD/ 结合使用,只对所需的列SDcols求和(通过regex):

mydt[, new_col := Reduce(`+`, .SD), .SDcols=grep("_0$", names(mydt), value=T)]
Run Code Online (Sandbox Code Playgroud)

如果你需要删除"..._ 0"变量:

mydt[, grep("_0$", names(mydt), value=T) := NULL]

mydt
#   id x_1 x_2 x_3 y_1 y_2 y_3 new_col
#1:  1   2   3  NA   5   4  NA       7
#2:  2   4   5   6   3   2   1      NA
#3:  3  NA  NA  NA  NA  NA  NA       0
Run Code Online (Sandbox Code Playgroud)

  • 你也可以尝试[`endswith`](https://gist.github.com/mrdwab/640ec81bbfe183991185),你可以使用它:`mydt [,new_col:= Reduce(`+`,.SD) ),. SDcols = endswith("0")] []`.+1 (4认同)