0

我不太确定这个问题是否已经存在。但是在浏览了互联网之后,我找不到任何与我的具体问题有关的东西。

因此,在 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,但我也无法让它工作。

任何建议/帮助/意见将不胜感激,谢谢。

4

1 回答 1

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
于 2013-04-25T15:15:37.763 回答