r - 通过正则表达式添加 data.table 的列

标签 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

我想添加标签为 0 的列。因此,我想要一个等于 的新列,而不是列 x_0y_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

因为我有很多这样的列,所以我想根据正则表达式 ("_0$") 选择它们。

最佳答案

您可以将 ReduceSD/SDcols 结合使用以仅对列求和(通过 regex)你想要:

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

如果您需要删除“..._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

关于r - 通过正则表达式添加 data.table 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526325/

相关文章:

r - 使用 .SDcols 时,data.table 可以处理相同的列名吗?

R数据表: label the counts of consecutive non-NA values

r - R 中用于通过循环保存数据的并行计算

r - OAuth(从 “httr” )到 Shiny 服务器上的 LinkedIn

r - 在一个 .R 文件中定义所有函数,从另一个 .R 文件调用它们。如果可以的话怎么办?

r - 在 R 中的同一列中获取计数和总和

r - 如何通过列与 data.table 库的总和来规范化每个列的值?

r - 在 R 的 data.table 中添加一个空列表作为值

r - 在行总和等于 1 的条件下所有可能的二进制数据矩阵

r - 在不了解 latex 的情况下在 R 中使用 stargazer