我有以下向量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]))
}
我的问题是:是否有更优雅的方式,即不使用循环?
答案 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