我想将一个函数应用于多个列,对一个参数使用不同值的向量。
我有一些数据:
library(data.table)
df1 <- as.data.table(data.frame(a = c(1,2,3),
b = c(4,5,6)))
cols <- c('a', 'b')
n <- 1:2
我想创建将n添加到a和b的列。输出如下:
a b a+1 b+1 a+2 b+2
1: 1 4 2 5 3 6
2: 2 5 3 6 4 7
3: 3 6 4 7 5 8
这篇文章详细介绍了如何将一个函数应用于多列,我知道如何做到这一点
df1[,paste0(cols,'+1'):= lapply(.SD, function(x) x + 1), .SDcols = cols]
我不知道的是如何将同一个函数应用于多列,用n代替1。
我们也可以使用outer
cbind(df1, df1[, lapply(.SD, function(x) outer(x, n, `+`))])
或者另一个选项是
nm1 <- paste0(cols, "+", rep(n, each = length(cols)))
df1[, (nm1) := lapply(n, `+`, .SD)]
这是一个基本的R解决方案
df1out <- cbind(df1,do.call(cbind,lapply(c(1,2), function(k) setNames(df1+k,paste0(names(df1),"+",k)))))
使得
> df1out
a b a+1 b+1 a+2 b+2
1: 1 4 2 5 3 6
2: 2 5 3 6 4 7
3: 3 6 4 7 5 8