здесь data.table
подход:
Поскольку вы не предоставляете никаких воспроизводимых примеров данных, мне пришлось сфабриковать один:
# load library
library(data.table)
# create data.table as the column binding of some letters and some numbers
dt <- cbind(data.table(x = LETTERS[1:5]),
as.data.table(matrix(sample(1:30, 30, FALSE),
nrow = 5)))
# the names aren't right, so we need to fix them according to your requirement:
names(dt) <- c("x", "1T", "2T", "3T", "1P", "2P", "3P")
Теперь рабочая часть: мы создадим столбец (для этого :=
), к которому применено среднее значение (это функции apply
и mean
) для некоторых столбцов (это .SD
), которые нам нужно определить (это часть .SDcols
).
Но это определение является двоичным, в зависимости от последней буквы имени столбца, поэтому мы используем grep
:
dt[, averageTs := apply(.SD, 1, mean), .SDcols = grep("T$", names(dt))]
Здесь мы ищем T в конце строки, а вектор, который мы будем искать, - это вектор names
самой data.table.
Выполнение этого для Ps - это та же команда, конечно, заменив Ts на Ps.
dt[, averagePs := apply(.SD, 1, mean), .SDcols = grep("P$", names(dt))]