在R中,统计数据框中一列的不同值数量

3
我想计算一个列的不同值。这是数据框架:
asa
----
aa
bb
aa
aa
bb
cc
dd

想要得到:
asa |  n
--------
aa  |  3
bb  |  2
cc  |  1
dd  |  1

我尝试使用来自在R中按组计算唯一/不同值的ddply,并执行以下代码:(可重现)
asa<-c("aa","bb","aa","aa","bb","cc","dd")
asad<-data.frame(asa)
ddply(asad,~asa,summarise,n=length(unique(asa)))

但我得到了:
  asa n
1  aa 1
2  bb 1
3  cc 1
4  dd 1

它没有进行计算。注意列中的值随时可以添加。因此它不总是“aa”,“bb”,“cc”和“dd”。它也可以用空格或逗号分隔(“aa bb”,“aa,bb”或“aa,bb”)。必须有一种方法解决这个问题。提前谢谢你。

1
尝试这个:table(asa) - Adam Quek
我能否将一个变量设置为aa的n值? - Elbert
1
将其放入数据框中,例如 asad <- data.frame(table(asa)),并更改名称,例如 names(asad)<-c("asa", "n") - Adam Quek
1
你的简单复制粘贴其他解决方案的原因是,在你的示例数据中,你正在计算相同的变量,而你正在分组。因此,unique(asa) 的结果是一个长度为1的向量。在你所提到的帖子中,数据是按名称分组,然后按另一个变量进行计数。因此,在你的情况下,只需删除 unique() 即可。 - Paul Lemmens
2个回答

2
我们可以使用table
setNames(as.data.frame(table(df1$asa)), c("asa", "n"))
#   asa    n
#1   aa    3
#2   bb    2
#3   cc    1
#4   dd    1

或者使用dplyr中的tally

library(dplyr)
df1 %>%
     group_by(asa) %>% 
     tally()
#    asa     n
#   (chr) (int)
#1    aa     3
#2    bb     2
#3    cc     1
#4    dd     1

让我执行 ss<-as.data.frame(table(asad$asa)) 和 ss[1,]$Freq。 - Elbert
@Elbert 你有什么疑问吗? - akrun
或者,如果您更喜欢使用 data.table,则可以使用 data.table(asa) %>% .[, .N, by = "asa"] - m-dz

1
更简单的方法是,只需使用as.data.frame和table函数,不需要其他参数。
as.data.frame(table(df$asa))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接