R: вычесть переменное количество столбцов из целевого столбца - PullRequest
0 голосов
/ 18 февраля 2020

I sh для создания функции, которая принимает три аргумента: таблицу данных, целевой столбец и вектор столбцов для вычитания из целевого столбца:

test = data.table(
  total = c(10,6,4,4,5,6), 
  b = c(9,5,3,3,4,5), 
  c = rep(1, 6),
  d = rep(2, 6)
)

функция (data, target = "total", cols = c ("b", "c")) должна выдавать желаемый результат:

test = data.table(
  total = c(10,6,4,4,5,6), 
  b = c(9,5,3,3,4,5), 
  c = rep(1, 6),
  d = rep(2, 6),
  new_total = rep(0, 6)
)

Пока попыток:

1)

testfunction <- function(dt, target, cols){
    dt[, new_total := target - .SD , .SDcols = cols]

}

2)

testfunction <- function(dt, target, cols){
     temp = copy(dt[, .SD, .SDcols = cols])
     dt[, new_total := target - temp]

 }

Ни одна из этих работ, и я думаю, что моя попытка показывает отсутствие понимания data.table, к сожалению.

1 Ответ

2 голосов
/ 18 февраля 2020

Попробуйте:

foo <- function(data, target = "total", cols = c("b", "c")) {
  data[, new_total := get(target) - rowSums(.SD), .SDcols = cols]
}

foo(test)[]

#    total b c d new_total
# 1:    10 9 1 2         0
# 2:     6 5 1 2         0
# 3:     4 3 1 2         0
# 4:     4 3 1 2         0
# 5:     5 4 1 2         0
# 6:     6 5 1 2         0

Проблемы были

  1. .SD - это data.table, в то время как target - это просто вектор.

  2. , чтобы получить столбец со строковой переменной, сделать это невозможно, например, вы можете использовать get(). Больше примеров здесь .

...