【问题标题】:Applying one function to multiple columns with a vector of values for parameter using data table使用数据表将一个函数应用于具有参数值向量的多个列
【发布时间】:2020-03-18 14:57:53
【问题描述】:

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

我有一些数据:

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

This post 详细说明了如何将一个函数应用于多个列,我知道该怎么做。

df1[,paste0(cols,'+1'):= lapply(.SD, function(x) x + 1), .SDcols = cols]

我不知道的是如何将相同的函数应用于多列,用 n 代替 1。

【问题讨论】:

    标签: r data.table apply


    【解决方案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)]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        相关资源
        最近更新 更多