我遇到过这个问题.我想确定下个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)
显然我可以写一个循环来做到这一点.但是我如何使用矢量化代码呢?
您可以使用以下命令执行运行计数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)