У меня очень большой набор данных. Примерно 300 столбцов, 500 000 строк. Данные аккуратны в том смысле, что в них нет дубликатов или ненужных вещей. Столбцы могут быть организованы по-разному различными способами, что означает, что я хочу создать, например, сумму, скажем, столбцов 5, 8, 10 и 15 в одном случае. Но в другом случае я хочу суммировать столбцы 5, 8, 10 и 274. Создание группы фреймов данных для каждого такого экземпляра явно избыточно. Мой текущий метод борьбы с этим - использование произвольных индексов. Например, вычисление суммы по:
index <- c(5,8,10,274)
sum(df[index])
Это прекрасно работает, но не работает, когда кто-то хочет вычислить сумму по множеству произвольных индексов. Список также будет избыточным, потому что, насколько я знаю, данные придется повторять для каждого нового способа его суммирования. Любые предложения о том, как это должно быть сделано?
Это мой первый вопрос, но я надеюсь, что он понятен без особых сложностей.
edit : Иногда мне нужно используйте большие индексы, что делает нумерацию спецификации c раздражающей. Например: index <- c(3,28,63,93,8,62,188,214,13,43,223,281,18,138,162,288,51,203,253,263,28,58,48,268)
. Очень сложно узнать, что означают эти цифры, поэтому также удобно просто написать имя.
edit2 :
set.seed(123)
df <- data.frame("A" = runif(1000, min = 1, max = 10),
"B" = runif(1000, min = 1, max = 10),
"C" = runif(1000, min = 1, max = 10),
"D" = runif(1000, min = 1, max = 10),
"E" = runif(1000, min = 1, max = 10),
"F" = runif(1000, min = 1, max = 10),
"G" = runif(1000, min = 1, max = 10),
"H" = runif(1000, min = 1, max = 10),
"I" = runif(1000, min = 1, max = 10),
"J" = runif(1000, min = 1, max = 10))
# Suppose I want to sum over A, D, F, and J.
meaningfulname1 <- c(1,4,6,10) #works fine
sum(df[meaningfulname1])
# Then a few more/other columns
meaningfulname2 <- c(1,2,5,9,10) #works fine
sum(df[meaningfulname2]) #both of these work fine, but how do I sum over both at the same time? E.g. below:
lst <- list(meaningfulname1,meaningfulname2)
lapply(df[lst], sum) # doesn't work