【发布时间】:2012-01-15 10:30:28
【问题描述】:
我正在尝试编写一个函数,该函数将保存时间序列数据的数据框的名称和该数据框中的列名称作为参数。该函数对该数据执行各种操作,其中之一是在列中添加每年的运行总计。我正在使用 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
【问题讨论】: