使用一对两个序列号创建id

时间:2016-12-08 16:54:18

标签: r database dplyr

在我的数据中,我有一个为期一周的专栏,并希望创建一个结合两周的变量。
例如,这是我的专栏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,...)

2 个答案:

答案 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