我有一个数据,其中一栏是年和周。
Data
201501
201501
201502
201503
201552
......
201601
201602...........
201652
201701
这里201501指2015年的第一周,而201552指2015年的最后一周。依此类推....我想将这些年/周组合隐瞒到明年的周组合中。所以201501成为201502和201552变为201601示例:
Original Data Converted Data
201501 201502
201501 201502
201502 201503
201503 201504.......
201552 201601
201601 201602....
201652 201701
201701 201702
我可以通过加1来实现,但是一旦将其更改为2015年至2016年,它将无法使用... 反正这样做吗?
答案 0 :(得分:3)
df = read.table(text = "
Data
201501
201501
201502
201503
201601
201602
201701
", header=T)
library(dplyr)
df %>%
distinct() %>% # keep unique values
mutate(ConvertedData = lead(Data)) %>% # add lead values (i.e. next greater value) and create a look up table
right_join(df, by="Data") # right join your original data
# Data ConvertedData
# 1 201501 201502
# 2 201501 201502
# 3 201502 201503
# 4 201503 201601
# 5 201601 201602
# 6 201602 201701
# 7 201701 NA
这种方法假设您的原始数据集具有正确的值顺序。
答案 1 :(得分:2)
假设数据帧Data
中的df
升序,则此方法使用unique
和match
。首先,这是数据帧。
df <- data.frame(Data = c(201501,201501,201502,201503,201601,201602,201701))
# Data
# 1 201501
# 2 201501
# 3 201502
# 4 201503
# 5 201601
# 6 201602
# 7 201701
接下来,我进行转换并将其绑定到原始数据帧。
cbind(df, Converted = with(df, unique(Data)[match(Data, unique(Data))+1]))
# Data Converted
# 1 201501 201502
# 2 201501 201502
# 3 201502 201503
# 4 201503 201601
# 5 201601 201602
# 6 201602 201701
# 7 201701 NA
这可以通过在列中找到所有唯一值来实现。然后,它将列中的每个元素与这些唯一值匹配。最后,它添加一个,以便引用下一个最大的唯一值。