如何对数据帧进行子集化并反复应用相同的函数?

时间:2015-06-26 17:17:13

标签: r automation

我有一个看似相当简单的问题,但我无法找到解决方案。

我有一个拥有57个国家的数据框架,其国内生产总值超过20年(共计1140次观察)。我想在每个国家/地区的mFilter软件包中应用HP Filter,然后将每个结果保存为新变量。像这样:

df <- read.csv("QNA_26062015181325399.csv")

usa <- subset(df, Country == "United States", select = c("TIME", "Value") )

usa.filtered <- hpfilter(usa$Value, type = "lambda", freq = 1600))

问题是我需要为每个国家重复此程序。我可以自动执行此过程而无需键入相同的代码57次吗?

3 个答案:

答案 0 :(得分:1)

您可以按国家/地区拆分数据并使用该功能

lapply(split(df[,c("TIME", "Value")], df$Country), 
    function(x) hpfilter(x$Value, type = "lambda", freq = 1600)
)

答案 1 :(得分:0)

如果您想使用plyr,请尝试:

library("plyr")
f = function(x) {
    hpfilter(x$Value, type = "lambda", freq = 1600)
}
dlply(df[, c("TIME", "Value", "Country")], .(Country), f)

答案 2 :(得分:0)

这是一个plyr解决方案:

library("plyr")
hpList <- dlply(df, .(Country), function(x) hpfilter(x$Value, type = "lambda", freq = 1600))

或者,您可以先拆分数据然后再处理它:

countryData <- dlply(df, .(Country), `[` , j = c("TIME", "Value"))
hpList <- llply(countryData, function(x) hpfilter(x$Value, type = "lambda", freq = 1600))