如何从R中的aggregate()函数创建表
我有一个如下所示的数据集:如何从R中的aggregate()函数创建表,r,R,我有一个如下所示的数据集: Type Date Lively Count sm 1/13/2010 10 10 sm 1/14/2010 10 20 sm 2/15/2010 20 30 am 4/16/2010 5 42 am 1/17/2010 10 34 am 3/18/2010 40 54 sm 1/19/2010 10 65 sm 4/20/2010
Type Date Lively Count
sm 1/13/2010 10 10
sm 1/14/2010 10 20
sm 2/15/2010 20 30
am 4/16/2010 5 42
am 1/17/2010 10 34
am 3/18/2010 40 54
sm 1/19/2010 10 65
sm 4/20/2010 5 67
sm 3/21/2010 40 76
我试着每月平均出所有的数值参数。因此,我的结果数据集理想情况下为:
Date Lively Count
Jan 2010 10 32.25
Feb 2010 20 30.00
Mar 2010 40 65.00
Apr 2010 5 54.50
我非常接近这一点,我目前拥有的是:
Lively Count
Jan 2010 10 32.25
Feb 2010 20 30.00
Mar 2010 40 65.00
Apr 2010 5 54.50
正如你所看到的,我缺少了“日期”这个标题。这是我的密码:
library(zoo)
z <- zoo(data[3:4], as.Date(data[,2], "%m/%d/%Y"))
aggregate(z, as.yearmon, mean)
图书馆(动物园)
z您可以使用列表
格式在聚合
中指定您的姓名
x <- aggregate(. ~ as.yearmon(index(z)), z, mean)
names(x)[1] <- "Date"
x
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
要获取“日期”值,需要参考zoo对象的“索引”
aggregate(list(Lively = z[, "Lively"], Count = z[, "Count"]),
list(Date = as.yearmon(index(z))), mean)
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
或者,如果需要,您可以轻松更改姓名。这将使您能够对聚合使用更好的公式方法
x <- aggregate(. ~ as.yearmon(index(z)), z, mean)
names(x)[1] <- "Date"
x
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
您可以使用列表
格式在聚合
中指定您的姓名
x <- aggregate(. ~ as.yearmon(index(z)), z, mean)
names(x)[1] <- "Date"
x
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
要获取“日期”值,需要参考zoo对象的“索引”
aggregate(list(Lively = z[, "Lively"], Count = z[, "Count"]),
list(Date = as.yearmon(index(z))), mean)
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
或者,如果需要,您可以轻松更改姓名。这将使您能够对聚合使用更好的公式方法
x <- aggregate(. ~ as.yearmon(index(z)), z, mean)
names(x)[1] <- "Date"
x
# Date Lively Count
# 1 Jan 2010 10 32.25
# 2 Feb 2010 20 30.00
# 3 Mar 2010 40 65.00
# 4 Apr 2010 5 54.50
@SimonO101,我没有将作为.yearmon
发布,而是因为OP试图从zoo
对象获取结果。我想这是一个很小的区别。不过,我不知道,我马上就有了它的用处。所以我想说声谢谢!:-)我还发现了一个名为fortify()的好方法,它可以将zoo对象转换为数据帧@user2649452,当然可以。您还可以使用data.frame(日期=索引(x),核心数据(x))
。我仍然不清楚为什么您不想要一个data.frame
(除非这是最后一个阶段,您只是出于美观的原因才这样做)zoo
在很多方面都可能更快,因为在R中对矩阵的操作通常比对data.frame
s的操作快得多。@SimonO101,我没有将作为.yearmon
发布,而是因为OP试图从zoo
对象获取结果。我想这是一个很小的区别。不过,我不知道,我马上就有了它的用处。所以我想说声谢谢!:-)我还发现了一个名为fortify()的好方法,它可以将zoo对象转换为数据帧@user2649452,当然可以。您还可以使用data.frame(日期=索引(x),核心数据(x))
。我仍然不清楚为什么您不想要一个data.frame
(除非这是最后一个阶段,您只是出于美观的原因才这样做)zoo
很可能在很多方面更快,因为在R中对矩阵的操作通常比对data.frame
s的操作快得多。最左边的“列”不是列,而是zoo
对象的索引。与data.table
的基本R中的rownames
类似,这不是一个“列”,因此不能给它命名。最左边的“列”不是列,而是zoo
对象的索引。与data.table
的基本R中的行名
类似,这不是一个“列”,因此不能给它命名。