总结一个数据帧
我想获取以下数据,然后使用这些数据创建一个表,其中包含按状态细分的信息。总结一个数据帧
这里的数据:
> head(mydf2, 10)
lead_id buyer_account_id amount state
1 52055267 62 300 CA
2 52055267 64 264 CA
3 52055305 64 152 CA
4 52057682 62 75 NJ
5 52060519 62 750 OR
6 52060519 64 574 OR
15 52065951 64 152 TN
17 52066749 62 600 CO
18 52062751 64 167 OR
20 52071186 64 925 MN
我媒体链接子集,我很感兴趣,和刚才我感兴趣的数据状态:
mydf2 = subset(mydf, state %in% c("NV","AL","OR","CO","TN","SC","MN","NJ","KY","CA"))
这里有一个想法我在找什么:
State Amount Count
NV 1 50
NV 2 35
NV 3 20
NV 4 15
AL 1 10
AL 2 6
AL 3 4
AL 4 1
...
对于每个州,我试图找到每个数量“级别”的计数。我没有必要需要组数量可变的,但要记住,他们不只是1,2,3等
> mydf$amount
[1] 300 264 152 75 750 574 113 152 750 152 675 489 188 263 152 152 600 167 34 925 375 156 675 152 488 204 152 152
[29] 600 489 488 75 152 152 489 222 563 215 452 152 152 75 100 113 152 150 152 150 152 452 150 152 152 225 600 620
[57] 113 152 150 152 152 152 152 152 152 152 640 236 152 480 152 152 200 152 560 152 240 222 152 152 120 257 152 400
是否有R表示此一个优雅的解决这个或将我被卡住使用Excel(yuck!)。
我不知道我是否理解正确(您有两个data.frames
mydf
和mydf2
)。我假设你的数据在mydf
。使用aggregate
:
mydf$count <- 1:nrow(mydf)
aggregate(data = mydf, count ~ amount + state, length)
这是你在找什么?
注意:这里的count
是创建一个变量,直接得到第三列的输出为count
。
替代与ddply
从plyr
:
# no need to create a variable called count
ddply(mydf, .(state, amount), summarise, count=length(lead_id))
这里有一个可以使用存在于一个人的数据,而不是lead_id
任何列。即使state
:
ddply(mydf, .(state, amount), summarise, count=length(state))
或等价不使用总结:
ddply(mydf, .(state, amount), function(x) c(count=nrow(x)))
这正是我所期待的。谢谢! – ATMathew 2013-02-08 17:51:45
如果没有引用“lead_id”,我得到eval中的错误(expr,envir,enclos):找不到对象'lead_id'。你可以用我的玩具例子来试试它,看看它是否按预期为你工作?同样在玩具的例子中,“聚合”的时钟速度比“ddply”快25倍。也可以直接在count中加入count('aggregate(data = mydf,1:nrow(mydf)〜amount + state,length)'),但是你必须清理结果变量名。 – A5C1D2H2I1M1N2O1R2T1 2013-02-08 18:12:14
@Arun,oops;)任何想法为什么输入它作为引用的作品? – A5C1D2H2I1M1N2O1R2T1 2013-02-08 18:22:37
这里是我的,你正在试图做什么的认识:
开始用一个简单的data.frame
与26个国家和只占范围从1到50(比范例中的范围要高得多)。
set.seed(1)
mydf <- data.frame(
state = sample(letters, 500, replace = TRUE),
amount = sample(1:50, 500, replace = TRUE)
)
head(mydf)
# state amount
# 1 g 28
# 2 j 35
# 3 o 33
# 4 x 34
# 5 f 24
# 6 x 49
下面是一些简单的列表。我还删除了频率等于零的任何实例,并且我按状态对输出进行了重新排序。
temp1 <- data.frame(table(mydf$state, mydf$amount))
temp1 <- temp1[!temp1$Freq == 0, ]
head(temp1[order(temp1$Var1), ])
# Var1 Var2 Freq
# 79 a 4 1
# 157 a 7 2
# 391 a 16 1
# 417 a 17 1
# 521 a 21 1
# 1041 a 41 1
dim(temp1) # How many rows/cols
# [1] 410 3
这是一个有点不同的制表。我们在分组“数量”值之后列表。在这里,我已经手动指定了休息时间,但是您可以轻松地让R决定最好的想法。
temp2 <- data.frame(table(mydf$state,
cut(mydf$amount,
breaks = c(0, 12.5, 25, 37.5, 50),
include.lowest = TRUE)))
temp2 <- temp2[!temp2$Freq == 0, ]
head(temp2[order(temp2$Var1), ])
# Var1 Var2 Freq
# 1 a [0,12.5] 3
# 27 a (12.5,25] 3
# 79 a (37.5,50] 3
# 2 b [0,12.5] 2
# 28 b (12.5,25] 6
# 54 b (25,37.5] 5
dim(temp2)
# [1] 103 3
你看过'表'吗? – A5C1D2H2I1M1N2O1R2T1 2013-02-08 17:19:17
你能解释一下你的意思吗?“我不需要对数量变量进行分组,但是请记住它们不仅仅是1,2,3等。” – A5C1D2H2I1M1N2O1R2T1 2013-02-08 17:25:14
对于这个例子,我使用了1,2,3等,但实际上有很多数量值。我正是这个意思。 – ATMathew 2013-02-08 17:32:27