我正在尝试编写一个函数,该函数将保存时间序列数据的数据框的名称和该数据框中的列的名称作为参数。该函数对该数据执行各种操作,其中之一是在列中添加每年的运行总计。我正在使用plyr。
当我直接将列名与 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])))
我以为我知道如何按名称访问列。这让我很担心,因为这表明我未能理解有关索引和提取的基本知识。我本以为以这种方式按名称引用列将是一种常见的需求。
我有两个问题。
- 我做错了什么,即我误解了什么?
- 考虑到函数不会事先知道列的名称,是否有更好的方法来解决这个问题?
TIA