Применение одной функции к нескольким столбцам с вектором значений для параметра с использованием таблицы данных - PullRequest
1 голос
/ 18 марта 2020

Я хотел бы применить одну функцию к нескольким столбцам, используя вектор различных значений для одного параметра.

У меня есть некоторые данные:

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

И я хочу создать столбцы что добавить к а и б. Вывод будет выглядеть следующим образом:

   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.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Мы также можем использовать outer

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

Или другой вариант

nm1 <- paste0(cols, "+", rep(n, each = length(cols)))
df1[, (nm1) := lapply(n, `+`, .SD)]
1 голос
/ 18 марта 2020

Вот базовое решение 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
...