我不太确定这个问题是否已经存在。但在浏览互联网后,我发现任何与我的具体问题无关的内容。
因此,在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,但我也无法做到这一点。
非常感谢任何建议/帮助/评论,谢谢。
答案 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