我想通过以下方式创建计数向量:

说我的载体是

x <- c(1,1,1,1,2)

代表分类变量。
我想要形式的第二个向量
x1 <- c(4,4,4,4,1)

代表每个级别的计数。例如1次出现4次,级别2次出现1次。

我试过了
r <- range(x) ; table(factor(x, levels = r[1]:r[2]))
tabulate(factor(x, levels = min(x):max(x)))
table(x)

最佳答案

这使用ave对每个值进行分组。如果您的向量绝对是integer类型,则可能会更好。

x <- c(1,1,1,1,2)

ave(x, x,  FUN = length)
[1] 4 4 4 4 1
data.tabledplyr中的等效项:
library(data.table)
data.table(x)[, n:= .N, by = 'x'][]

   x n
1: 1 4
2: 1 4
3: 1 4
4: 1 4
5: 2 1

library(dplyr)
library(tibble)
tibble::enframe(x, name = NULL)%>%
  add_count(value)

##or

x%>%
  tibble::enframe(name = NULL)%>%
  group_by(value)%>%
  mutate(n = n())%>%
  ungroup()

# A tibble: 5 x 2
  value     n
  <dbl> <int>
1     1     4
2     1     4
3     1     4
4     1     4
5     2     1

10-01 20:28
查看更多