R 统计数据
我有两个数据集。其中一个有200万个案例(个人对各种事业的捐赠),另一个约有38000个案例(所有邮政编码都在美国) 我想对第一组数据进行排序,并按邮政编码统计捐款总数。(此外,每个邮政编码的总数将按原因进行细分。)第一组数据中的每个案例都包括相应捐赠的邮政编码以及捐赠的原因信息 有没有一种有效的方法可以做到这一点?唯一的方法,我(非常新手)可以想到的是使用一个。。。如果循环要遍历每个案例,并逐一计算。但是,对于这种大小的数据集来说,这似乎是非常缓慢的 编辑:谢谢,@josilber。这让我离我想要的东西更近了一步 不过,还有一个问题<代码>表格似乎生成了频率,对吗?如果我真的在按邮政编码查找每个原因的总数呢?例如,如果数据帧如下所示:R 统计数据,r,data-cleaning,R,Data Cleaning,我有两个数据集。其中一个有200万个案例(个人对各种事业的捐赠),另一个约有38000个案例(所有邮政编码都在美国) 我想对第一组数据进行排序,并按邮政编码统计捐款总数。(此外,每个邮政编码的总数将按原因进行细分。)第一组数据中的每个案例都包括相应捐赠的邮政编码以及捐赠的原因信息 有没有一种有效的方法可以做到这一点?唯一的方法,我(非常新手)可以想到的是使用一个。。。如果循环要遍历每个案例,并逐一计算。但是,对于这种大小的数据集来说,这似乎是非常缓慢的 编辑:谢谢,@josilber。这让我离我
dat3 <- data.frame(zip = sample(paste("Zip", 1:3), 2000000, replace=TRUE),
cause = sample(paste("Cause", 1:3), 2000000, replace=TRUE),
amt = sample(250:2500, 2000000, replace=TRUE))
这有意义吗 当然,您可以使用R中的
table
命令完成所需的任务。首先,让我们从一个可复制的示例开始(我将创建一个包含200万个案例、3个邮政编码和3个原因的示例;我知道您有更多邮政编码和更多原因,但这不会导致代码运行时间过长):
这在我的计算机上花费了大约0.3秒。这能工作吗?-
aggregate(amt~cause+zip,data=dat3,FUN=sum)
cause zip amt
1 Cause 1 Zip 1 306231179
2 Cause 2 Zip 1 306600943
3 Cause 3 Zip 1 305964165
4 Cause 1 Zip 2 305788668
5 Cause 2 Zip 2 306306940
6 Cause 3 Zip 2 305559305
7 Cause 1 Zip 3 304898918
8 Cause 2 Zip 3 304281568
9 Cause 3 Zip 3 303939326
欢迎使用stackoverflow,它将有助于获得一些示例输入数据和一些示例输出数据,请参见此处:;除此之外,我还会查看packages data.table(参见此处了解简介:)和或dplyr(仍然快,但不如data.table快,但更易于使用),参见此处了解简介:;努力理解其中一个,它将永远帮助你!!!非常感谢您的帮助!:)还有一个问题,如果你有时间的话,请编辑回我原来的帖子。
# Data
set.seed(144)
dat <- data.frame(zip = sample(paste("Zip", 1:3), 2000000, replace=TRUE),
cause = sample(paste("Cause", 1:3), 2000000, replace=TRUE))
table(dat$zip, dat$cause)
# Cause 1 Cause 2 Cause 3
# Zip 1 222276 222004 222744
# Zip 2 222068 222791 222363
# Zip 3 221015 221930 222809
aggregate(amt~cause+zip,data=dat3,FUN=sum)
cause zip amt
1 Cause 1 Zip 1 306231179
2 Cause 2 Zip 1 306600943
3 Cause 3 Zip 1 305964165
4 Cause 1 Zip 2 305788668
5 Cause 2 Zip 2 306306940
6 Cause 3 Zip 2 305559305
7 Cause 1 Zip 3 304898918
8 Cause 2 Zip 3 304281568
9 Cause 3 Zip 3 303939326