每个元素的计数出现次数,没有任何循环

问题描述 投票:1回答:1

我有以下向量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]))
}

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

r
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.