Как я могу использовать имена переменных для ссылки на столбцы фрейма данных с помощью ddply?

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

Когда я использую имя столбца напрямую с ddply и cumsum, у меня нет проблем:

require(plyr)
df <- data.frame(date = seq(as.Date("2007/1/1"),
                     by = "month",
                     length.out = 60),
                 sales = runif(60, min = 700, max = 1200))

df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df <- ddply(df, .(year), transform,
            cum_sales = (cumsum(as.numeric(sales))))

Это все хорошо, но конечная цель - передать имя столбца этой функции. Когда я пытаюсь использовать переменную вместо имени столбца, это работает не так, как я ожидал:

mycol <- "sales"
df[mycol]

df <- ddply(df, .(year), transform,
            cum_value2 = cumsum(as.numeric(df[mycol])))

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

У меня два вопроса.

  1. Что я делаю не так, т.е. что я неправильно понял?
  2. Есть ли лучший способ сделать это, учитывая, что имена столбцов не будут заранее известны функции?

TIA

5
задан SlowLearner 28 November 2013 в 08:11
поделиться