data.table通过引用使用lapply进行赋值,并返回其余列

0 r data.table

我希望能够在列的子集上应用函数,并返回那些已被操作的列以及未触及的其余数据列.有没有办法用data.table来做到这一点.我无法弄清楚语法.

在这个例子中,我有NAs,并希望用其他东西覆盖几个不同的列.我还需要一种方法来返回其他未触及的列.

library(data.table)

# make data set
a <- sample(c(letters[1:5], NA), 50, replace=TRUE)
b <- sample(c(LETTERS[1:5], NA), 50, replace=TRUE)
c <- sample(runif(50))

x <- data.table(a,b,c)

# function to apply to a single column
overwriteNA <- function(vec, new="") ifelse(is.na(vec), new, vec)

# Only returns .SDcols but would like to also include rest of columns in data.table
x[, lapply(.SD, overwriteNA), .SDcols=c("a", "b")]

# Need something along these lines
x[, `:=` lapply(.SD, overwriteNA), .SDcols=c("a", "b")]
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 5

尝试

x[,  c("a", "b") := lapply(.SD, overwriteNA), .SDcols = c("a", "b")]
Run Code Online (Sandbox Code Playgroud)

编辑:

每个OP的额外请求.

myCols <- c("a", "b")  
x[, (myCols) := lapply(.SD, overwriteNA), .SDcols = myCols]
Run Code Online (Sandbox Code Playgroud)