在没有任何循环的情况下计算每个元素的出现次数

时间:2017-12-12 14:46:10

标签: r

我有以下向量V1 <- c(1, 2, 3, 1, 4, 5, 5, 2, 1)

我希望有一个相同大小的向量V2,每个元素指示V1中相应元素出现的频率,即V2应为c(3, 2, 1, 3, 1, 2, 2, 2, 3)

我知道有很多方法可以获得这个结果,但是所有这些方法都包括使用循环,例如。

V2 <- c()
for(k in 1:length(V1)){
  V2[k] <- length(which(V1 == V1[k]))
}

我的问题是:是否有更优雅的方式,即不使用循环?

1 个答案:

答案 0 :(得分:0)

总结提供的解决方案

# @bouncyball
ave(V1, V1, FUN = length)
# [1] 3 2 1 3 1 2 2 2 3

# @AntoniosK
table(V1)[V1]
# V1
# 1 2 3 1 4 5 5 2 1 
# 3 2 1 3 1 2 2 2 3 

# @Roman
library(tidyverse); 
as.tibble(V1) %>% group_by(value) %>% mutate(V2=n())
#   A tibble: 9 x 2
#   Groups:   value [5]
#   value    V2
#   <dbl> <int>
# 1     1     3
# 2     2     2
# 3     3     1
# 4     1     3
# 5     4     1
# 6     5     2
# 7     5     2
# 8     2     2
# 9     1     3