从函数R输出多个对象

时间:2013-04-25 15:01:07

标签: r

我不太确定这个问题是否已经存在。但在浏览互联网后,我发现任何与我的具体问题无关的内容。

因此,在R编程中,我想通过拆分来从数据帧中批量输出对象(特别是时间序列对象)。在此之前,我一直在为每个用户粘贴重复的连接命令,感觉这是一个非常繁琐的过程,所以我想知道我是否可以构建一个将变量拆分数据框的函数,应用ts()函数,标记该对象创建,并输出创建的所有对象。

理想情况下,我想到的第一件事就是使用by命令并将函数应用于每个拆分。例如,下面是我尝试过的代码(注意,这只是一个小例子,我的实际数据框比这大得多)。

#test df for stackoverflow
df<-data.frame(user=c(rep(1,5),rep(2,5),rep(3,5),rep(4,5)))
df$values<-c(10,20,30,40,9,19,29,39,11,21,31,41,12,22,32,42,8,18,34,44)

#playing around with the by command
dd<-by(df,df$user,FUN=function(x){
  time = ts(x$values,freqency=2),
  label = x$user[1],
  label<-time,
  return(label)
})

该错误只是说波浪支架有错误。我也在'plyr'包中查看了ddply,但我也无法做到这一点。

非常感谢任何建议/帮助/评论,谢谢。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想用变量拆分data.frame并将每个部分转换为时间序列对象。

您可以使用plyr并将结果作为列表获取(如果您的每个用户的数据数量不相等)

require(plyr)
dlply(df, .(user), function(df) ts(df$value, frequency = 12))

如果你想要

,你仍然可以使用by
by(df$value, df$user, function(x) ts(x, frequency = 12))

## df$user: 1
##   Jan Feb Mar Apr May
## 1  10  20  30  40   9
## ------------------------------------------------ 
## df$user: 2
##   Jan Feb Mar Apr May
## 1  19  29  39  11  21
## ------------------------------------------------ 
## df$user: 3
##   Jan Feb Mar Apr May
## 1  31  41  12  22  32
## ------------------------------------------------ 
## df$user: 4
##   Jan Feb Mar Apr May
## 1  42   8  18  34  44