减少 data.table 语法中列和对象名称的重复

问题描述 投票:0回答:1

使用

data.table
,我想修改数据表对象
x1
的列
x2
x3
dt
。每个版本的代码都实现了修改,但在多个地方重复了对象和列名称。

如何减少这种重复?例如,是否有一种简单的方法来指示

.SDcols = cols_to_modify
应就地更新,而不将
cols_to_modify
添加到第二个参数的 LHS?

注意,我正在处理大数据,因此我必须使用

data.table
而不是
tidyverse
,因为前者要快得多。

library(data.table)
library(stringr)

dt <- data.table(A = c(1, 2, 3), B = c("apple", "pear", "banana"), 
                 x1 = c(2, 4, 6), x2 = c(3, 6, 9), x3 = c(1, 2, 3))

# Version 1
cols_to_modify <- str_subset(names(dt), "^x[0-9]+$")

dt[, (cols_to_modify) := lapply(.SD, as.character), .SDcols = cols_to_modify]


# Version 2
dt[, (str_subset(names(dt), "^x[0-9]+$")) := lapply(.SD, as.character), .SDcols = cols_to_modify]
r data.table tidyverse
1个回答
0
投票

一个可能的替代方案:

convert_cols <- function(dt, cols, fun) {
  for (col in cols) set(dt, j = col, value = fun(dt[[col]]))
}

convert_cols(dt, cols_to_modify, fun = as.character)
© www.soinside.com 2019 - 2024. All rights reserved.