在我的数据中,我有一个为期一周的专栏,并希望创建一个结合两周的变量。
例如,这是我的专栏x,
x = c(201336, 201336, 201336, 201337, 201337, 201340, 201341, 201341, 201342, 201343, 201344, ...)
在x
中,201336表示2013年第36周,201337表示2013年第37周,依此类推。我想表明
(201336,201337) -> 1
(201338,201339) -> 2
(201340,201341) -> 3
(201342,201343) -> 4
(201344,201345) -> 5
等等
所以,我想要的矢量就是那个
x2 = c(1,1,1,1,1,3,3,3,4,4,5,...)
答案 0 :(得分:1)
如果上面提到的@Psidom只有一年,它似乎是:
(x - min(x))%/%2 + 1
<强> [更新] 强> 如果您的向量包含不同年份的条目:
set.seed(112358)
x <- sample(1992:2017,1000, replace = T)
x <- as.integer((x + sample(seq(.1,.52,length.out=length(1992:2017)),
1000,replace = T)
)*100)
x <- x[order(x)]
names(x) <- x%/%100
head(x, 11)
#1992 1992 1992 1992 1992 1992 1992 1992 1992 1992 1992
#199210 199211 199213 199213 199215 199216 199220 199220 199220 199221 199221
tail(x, 11)
#2017 2017 2017 2017 2017 2017 2017 2017 2017 2017 2017
#201736 201738 201740 201740 201741 201741 201743 201745 201746 201750 201752
foo <- function(x){
return((x-min(x))%/%2+1)
}
xm <- unlist(sapply(unique(names(x)), function(i) foo(x[names(x) == i])), use.names = F)
mdf <- data.frame(original = x, modified = xm)
head(mdf)
# original modified
#1 199210 1
#2 199211 1
#3 199213 2
#4 199213 2
#5 199215 3
#6 199216 4
tail(mdf)
# original modified
#995 201741 16
#996 201743 17
#997 201745 18
#998 201746 19
#999 201750 21
#1000 201752 22
答案 1 :(得分:0)
这应该适合你:
x = c(201336, 201336, 201336, 201337, 201337, 201340, 201341, 201341, 201342, 201343, 201344)
as.integer((x - 201336) / 2) + 1
# [1] 1 1 1 1 1 3 3 3 4 4 5