比方说我有:
v = rep(c(1,2, 2, 2), 25)
Run Code Online (Sandbox Code Playgroud)
现在,我想计算每个唯一值出现的次数.unique(v) 返回唯一值的内容,但不返回它们的数量.
> unique(v)
[1] 1 2
Run Code Online (Sandbox Code Playgroud)
我想要一些能给我的东西
length(v[v==1])
[1] 25
length(v[v==2])
[1] 75
Run Code Online (Sandbox Code Playgroud)
但作为一个更一般的单线:)有点接近(但不完全)像这样:
#<doesn't work right> length(v[v==unique(v)])
Run Code Online (Sandbox Code Playgroud)
Cha*_*ase 170
也许桌子就是你追求的?
dummyData = rep(c(1,2, 2, 2), 25)
table(dummyData)
# dummyData
# 1 2
# 25 75
## or another presentation of the same data
as.data.frame(table(dummyData))
# dummyData Freq
# 1 1 25
# 2 2 75
Run Code Online (Sandbox Code Playgroud)
ant*_*ine 21
如果您有多个因素(=多维数据框),则可以使用该dplyr包计算每个因子组合中的唯一值:
library("dplyr")
data %>% group_by(factor1, factor2) %>% summarize(count=n())
Run Code Online (Sandbox Code Playgroud)
它使用管道运算符%>%来链接数据帧上的方法调用data.
Sea*_*ite 18
这是一种使用的单线方法aggregate.
> aggregate(data.frame(count = v), list(value = v), length)
value count
1 1 25
2 2 75
Run Code Online (Sandbox Code Playgroud)
C. *_*eng 10
正如Chase建议的那样,table()函数是一个很好的方法.如果要分析大型数据集,则另一种方法是在datatable包中使用.N函数.
确保安装了数据表包
install.packages("data.table")
Run Code Online (Sandbox Code Playgroud)
码:
# Import the data.table package
library(data.table)
# Generate a data table object, which draws a number 10^7 times
# from 1 to 10 with replacement
DT<-data.table(x=sample(1:10,1E7,TRUE))
# Count Frequency of each factor level
DT[,.N,by=x]
Run Code Online (Sandbox Code Playgroud)
要获得包含唯一值计数的无量纲整数向量,请使用c().
dummyData = rep(c(1, 2, 2, 2), 25) # Chase's reproducible data
c(table(dummyData)) # get un-dimensioned integer vector
1 2
25 75
str(c(table(dummyData)) ) # confirm structure
Named int [1:2] 25 75
- attr(*, "names")= chr [1:2] "1" "2"
Run Code Online (Sandbox Code Playgroud)
如果您需要将唯一值的计数提供给另一个函数,这可能很有用,并且比t(as.data.frame(table(dummyData))[,2]对Chase的答案的评论中发布的更短且更惯用.感谢Ricardo Saporta 在这里向我指出这一点.
另外,将值分类并调用summary()也可以。
> v = rep(as.factor(c(1,2, 2, 2)), 25)
> summary(v)
1 2
25 75
Run Code Online (Sandbox Code Playgroud)
这适合我.拿你的矢量v
length(summary(as.factor(v),maxsum=50000))
注释:将maxsum设置为足以捕获唯一值的数量
或与magrittr包裹
v %>% as.factor %>% summary(maxsum=50000) %>% length
您也可以尝试tidyverse
library(tidyverse)
dummyData %>%
as.tibble() %>%
count(value)
# A tibble: 2 x 2
value n
<dbl> <int>
1 1 25
2 2 75
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
381821 次 |
| 最近记录: |