繁体   English   中英

使用数据表将一个函数应用于具有参数值向量的多列

[英]Applying one function to multiple columns with a vector of values for parameter using data table

我想将一个函数应用于多列,对一个参数使用不同值的向量。

我有一些数据:

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。

这是一个基本的 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

我们也可以使用outer

cbind(df1, df1[,  lapply(.SD, function(x) outer(x, n, `+`))])

或者另一种选择是

nm1 <- paste0(cols, "+", rep(n, each = length(cols)))
df1[, (nm1) := lapply(n, `+`, .SD)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM