我有一些我希望由政党和国家描述的调查数据。
我在使用by()聚合命令时遇到了一些麻烦。它适用于许多函数,但不是length()。例如:
by(x, list(party=nn$info$party,state=nn$info$st),mean)
工作正常但不是
by(x, list(party=nn$info$party,state=nn$info$st),length)
返回一个数组,而不是我正在寻找的数据计数,而只是一系列的1。这就是阿拉巴马州的样子:
party: D
state: AL
[1] 1
---------------------------------------------------------------------------
party: I
state: AL
[1] 1
---------------------------------------------------------------------------
party: R
state: AL
[1] 1
---------------------------------------------------------------------------
非常神秘。有什么想法吗?
答案 0 :(得分:4)
好的,我猜测x
是一个数据框。在这种情况下,length
返回列数,而不是元素数。您想要nrow
。请注意,如果foo
是数据框,则按foo$bar
获取单个列将返回包含一列的数据框。
> by(1:10, rep(1:5, 2), length)
rep(1:5, 2): 1
[1] 2
------------------------------------------------------------
rep(1:5, 2): 2
[1] 2
------------------------------------------------------------
rep(1:5, 2): 3
[1] 2
------------------------------------------------------------
rep(1:5, 2): 4
[1] 2
------------------------------------------------------------
rep(1:5, 2): 5
[1] 2
> by(data.frame(1:10), rep(1:5, 2), length)
rep(1:5, 2): 1
[1] 1
------------------------------------------------------------
rep(1:5, 2): 2
[1] 1
------------------------------------------------------------
rep(1:5, 2): 3
[1] 1
------------------------------------------------------------
rep(1:5, 2): 4
[1] 1
------------------------------------------------------------
rep(1:5, 2): 5
[1] 1
> by(data.frame(1:10), rep(1:5, 2), nrow)
rep(1:5, 2): 1
[1] 2
------------------------------------------------------------
rep(1:5, 2): 2
[1] 2
------------------------------------------------------------
rep(1:5, 2): 3
[1] 2
------------------------------------------------------------
rep(1:5, 2): 4
[1] 2
------------------------------------------------------------
rep(1:5, 2): 5
[1] 2
答案 1 :(得分:2)
如果您尝试获取不同数据组的记录数,那么最简单的方法通常是使用table
。您的帖子中不清楚您要使用哪个数据框 - 是x
还是nn$info
?考虑到这一点,您的代码应该类似于
with(nn$info, table(party, state=st))
以下是任何人都可以使用Cars93
包中的MASS
数据集进行复制的示例。
> with(Cars93, table(Type, AirBags))
AirBags
Type Driver & Passenger Driver only None
Compact 2 9 5
Large 4 7 0
Midsize 7 11 4
Small 0 5 16
Sporty 3 8 3
Van 0 3 6