R:如何为向量中的每个唯一值分配一个运行计数器?

xia*_*dai 2 r

我遇到过这个问题.我想确定下个100年每个月的第二个星期日的日子.这是我的代码

x <- seq(as.Date("2014-9-01"),as.Date("2014-9-01")+100*365.25,1)

y <- format(x,"%Y%m")

xx <- NULL
for(i in unique(y)) {
  w <- which(y == i)
  xx <- c(xx,x[w[which(weekdays(x[w]) == "Sunday")[2]]])
}

head(xx)
tail(xx)
Run Code Online (Sandbox Code Playgroud)

我已经实现了它,但我不得不使用循环.如何使用矢量化代码更有效地执行此操作?

通常,假设存在具有n个不同值的向量v,如何为每个不同的值分配增加值,对于每个不同的值,从1开始为1.也就是说,假设我从向量开始

v <- c(1,1,1,2,2,2,2,3,4,4)
Run Code Online (Sandbox Code Playgroud)

我想生成一个"运行计数器" v.counter,其中包含v中的唯一值

v.counter <- c(1,2,3,1,2,3,4,1,1,2)
Run Code Online (Sandbox Code Playgroud)

显然我可以写一个循环来做到这一点.但是我如何使用矢量化代码呢?

eip*_*i10 8

您可以使用以下命令执行运行计数dplyr:

library(dplyr)

dat = data.frame(x=rep(1:10, each=3))

dat = dat %>%
  group_by(x) %>%
  mutate(x_count=1:n())

    x x_count
1   1       1
2   1       2
3   1       3
4   2       1
5   2       2
6   2       3
...
25  9       1
26  9       2
27  9       3
28 10       1
29 10       2
30 10       3
Run Code Online (Sandbox Code Playgroud)