gpt4 book ai didi

r - R中按组求和的ddply

转载 作者:行者123 更新时间:2023-12-03 10:51:01 24 4
gpt4 key购买 nike

我有一个示例数据框“数据”,如下所示:

X            Y  Month   Year    income
2281205 228120 3 2011 1000
2281212 228121 9 2010 1100
2281213 228121 12 2010 900
2281214 228121 3 2011 9000
2281222 228122 6 2010 1111
2281223 228122 9 2010 3000
2281224 228122 12 2010 1889
2281225 228122 3 2011 778
2281243 228124 12 2010 1111
2281244 228124 3 2011 200
2281282 228128 9 2010 7889
2281283 228128 12 2010 2900
2281284 228128 3 2011 3400
2281302 228130 9 2010 1200
2281303 228130 12 2010 2000
2281304 228130 3 2011 1900
2281352 228135 9 2010 2300
2281353 228135 12 2010 1333
2281354 228135 3 2011 2340

我想用 ddply计算每个人的收入 Y (不是 X ),如果我对每个 Y 有四个观察结果(例如,对于 2281223,2010 年的第 6、9、12 个月和 2011 年的第 3 个月)。如果我的观察值少于四个(例如 Y = 228130),我只想忽略它。我在 R 中使用以下命令为上述目的:
require(plyr)
# the data are in the data csv file
data<-read.csv("data.csv")
# convert Y (integers) into factors
y<-as.factor(y)
# get the count of each unique Y
count<-ddply(data,.(Y), summarize, freq=length(Y))
# get the sum of each unique Y
sum<-ddply(data,.(Y),summarize,tot=sum(income))
# show the sum if number of observations for each Y is less than 4
colbind<-cbind(count,sum)
finalsum<-subset(colbind,freq>3)

我的输出如下:
>colbind
Y freq Y tot
1 228120 1 228120 1000
2 228121 3 228121 11000
3 228122 4 228122 6778
4 228124 2 228124 1311
5 228128 3 228128 14189
6 228130 3 228130 5100
7 228135 3 228135 5973
>finalsum
Y freq Y.1 tot
3 228122 4 228122 6778

上面的代码有效,但需要很多步骤。所以,我想知道是否有一种简单的方法来执行上述任务(使用 plyr 包)。

最佳答案

正如评论中所指出的,您可以在 summarize 中进行多项操作。 .

这将您的代码减少到一行 ddply()和一行子集,使用 [ 很容易运算符(operator):

x <- ddply(data, .(Y), summarize, freq=length(Y), tot=sum(income))
x[x$freq > 3, ]

Y freq tot
3 228122 4 6778

使用 data.table 这也非常容易包裹:
library(data.table)
data.table(data)[, list(freq=length(income), tot=sum(income)), by=Y][freq > 3]
Y freq tot
1: 228122 4 6778

实际上,计算向量长度的操作在 data.table中有自己的快捷方式。 - 使用 .N捷径:
data.table(data)[, list(freq=.N, tot=sum(income)), by=Y][freq > 3]
Y freq tot
1: 228122 4 6778

关于r - R中按组求和的ddply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com