比方说我有:
v = rep(c(1,2, 2, 2), 25)
现在,我想计算每个唯一值出现的次数 . unique(v)
返回唯一值的内容,但不返回它们的数量 .
> unique(v)
[1] 1 2
我想要一些能给我的东西
length(v[v==1])
[1] 25
length(v[v==2])
[1] 75
但作为一个更一般的单线:)有点接近(但不完全)像这样:
#<doesn't work right> length(v[v==unique(v)])
11 回答
这适合我 . 拿你的矢量
v
length(summary(as.factor(v),maxsum=50000))
注释:将maxsum设置为足以捕获唯一值的数量
或者使用
magrittr
包v %>% as.factor %>% summary(maxsum=50000) %>% length
如果您需要将唯一值的数量作为包含值的数据框中的附加列(例如,可以表示样本大小的列),则plyr提供了一种巧妙的方式:
同时使值分类并调用
summary()
也可以 .你也可以试试
tidyverse
也许 table 就是你追求的?
这是一种使用
aggregate
的单行方法 .如果您有多个因子(=多维数据框),则可以使用
dplyr
包计算每个因子组合中的唯一值:它使用管道运算符
%>%
对数据框data
进行链式方法调用 .table()函数是一个很好的方法,如Chase建议的那样 . 如果要分析大型数据集,则另一种方法是在datatable包中使用.N函数 .
确保安装了数据表包
码:
要获取包含唯一值计数的未标量整数向量,请使用
c()
.如果您需要将唯一值的计数提供给另一个函数,这可能很有用,并且比对Chase的答案的评论中发布的
t(as.data.frame(table(dummyData))[,2]
更短且更惯用 . 感谢Ricardo Saporta向我指出了这一点here .如果要在data.frame(例如,train.data)上运行唯一,并且还获取计数(可以在分类器中用作权重),则可以执行以下操作: