R-直接或首先转换为数据帧提取xts对象中所有列的摘要统计信息

R-直接或首先转换为数据帧提取xts对象中所有列的摘要统计信息,r,dataframe,aggregate,xts,R,Dataframe,Aggregate,Xts,我有一个xts对象,它包含24小时内的多个参数(每分钟测量)。根据时间,我添加了一个列分组到4个“一天中的时间”(tod)选项中:“上午”、“下午”、“晚上”和“晚上” 我想提取整个期间以及按时间(“tod”)计算的列(参数)的平均值和标准偏差 我曾尝试首先将xts对象转换为数据帧,但由于列是class factor而不是numeric,所以出现了问题。我也尝试过“聚合”,但当我使用聚合时,得到了非常奇怪的输出(或错误)。以下是一个例子: 例如,创建更小版本的我的数据的代码: # time ve

我有一个xts对象,它包含24小时内的多个参数(每分钟测量)。根据时间,我添加了一个列分组到4个“一天中的时间”(tod)选项中:“上午”、“下午”、“晚上”和“晚上”

我想提取整个期间以及按时间(“tod”)计算的列(参数)的平均值和标准偏差

我曾尝试首先将xts对象转换为数据帧,但由于列是class factor而不是numeric,所以出现了问题。我也尝试过“聚合”,但当我使用聚合时,得到了非常奇怪的输出(或错误)。以下是一个例子:

例如,创建更小版本的我的数据的代码:

# time vector:
Time <- ISOdatetime(2015,01,01,6,12,0) + seq(0:(0.5*60-1))*1*60

# sample parameter columns
a <- 1:30
b <- 31:60
c<-seq(1,90,3)

# a sample xts object 'tester'
tester <- xts(cbind(a,b,c),Time)

# assign 'time of day':
tester$tod <- NA
tester$tod["T06:00/T06:20"]<-"night"
tester$tod["T06:21/T11:30"]<-"morning"
tester$tod["T06:31/T06:50"]<-"afternoon"
时间向量:
时间当您尝试创建字符向量时,
tod
您需要强制coredata矩阵为字符而不是数字。当它基本上拒绝让您弄乱其他数据时,作者发出了警告,但您忽略了它(直到我做了一些额外的工作,我才理解)。您可以构造一个数字向量来进行分组:

> tester$tod <- NA
> tester$tod["T06:00/T06:20"]<-1
> tester$tod["T06:21/T11:30"]<-2
> tester$tod["T06:31/T06:50"]<-3
> 
> tester$group = 1 
> (mean_all <- aggregate(.~group, data=tester, FUN=mean, na.rm = TRUE, na.action=NULL))
  group    a    b    c      tod
1     1 15.5 45.5 44.5 2.133333
> (meann_tod <- aggregate(.~tod, data=tester, FUN=mean, na.rm = TRUE, na.action=NULL))
  tod    a    b    c group
1   1  4.5 34.5 11.5     1
2   2 13.5 43.5 38.5     1
3   3 24.5 54.5 71.5     1
>测试器$tod测试器$tod[“T06:00/T06:20”]测试器$tod[“T06:21/T11:30”]测试器$tod[“T06:31/T06:50”]
>测试仪$group=1
>(指所有人)
> tester$tod <- NA
> tester$tod["T06:00/T06:20"]<-1
> tester$tod["T06:21/T11:30"]<-2
> tester$tod["T06:31/T06:50"]<-3
> 
> tester$group = 1 
> (mean_all <- aggregate(.~group, data=tester, FUN=mean, na.rm = TRUE, na.action=NULL))
  group    a    b    c      tod
1     1 15.5 45.5 44.5 2.133333
> (meann_tod <- aggregate(.~tod, data=tester, FUN=mean, na.rm = TRUE, na.action=NULL))
  tod    a    b    c group
1   1  4.5 34.5 11.5     1
2   2 13.5 43.5 38.5     1
3   3 24.5 54.5 71.5     1
> (meann_tod <- aggregate(cbind(a,b,c)~tod, data=tester, FUN=mean, na.rm = TRUE, na.action=NULL))
  tod    a    b    c
1   1  4.5 34.5 11.5
2   2 13.5 43.5 38.5
3   3 24.5 54.5 71.5