我正在处理类似的数据
structure(list(id = c("aaa", "aaa", "aaa", "aaa", "aaa", "aaa",
"aaa", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb", "ccc",
"ccc", "ccc", "ccc", "ccc", "ccc"), score = c(100.5, 110.46,
113.35, 128.214, 130.123, 134.56, 139.56, 20.5, 21.465, 30.436,
49.24, 60.325, 66.4, 70.25, 99.43, 70.35, 64.4, 60.325, 55.35,
42.35), date = c("2018-02-25", "2018-02-25", "2018-02-25", "2018-02-25",
"2018-02-25", "2018-02-25", "2018-02-25", "2018-03-18", "2018-03-18",
"2018-03-18", "2018-03-18", "2018-03-18", "2018-03-18", "2018-03-18",
"2018-04-22", "2018-04-22", "2018-04-22", "2018-04-22", "2018-04-22",
"2018-04-22")), class = "data.frame", row.names = c(NA, -20L))
对于较大的数据集,我想用按日期ID分组的每周日期序列替换重复的日期值。 我的示例输出:
id score date
aaa 100.5 2018-02-25
aaa 110.46 2018-03-04
aaa 113.35 2018-03-11
aaa 128.214 2018-03-18
aaa 130.123 2018-03-25
aaa 134.56 2018-04-01
aaa 139.56 2018-04-08
bbb 20.5 2018-03-18
bbb 21.465 2018-03-25
bbb 30.436 2018-04-01
bbb 49.24 2018-04-08
bbb 60.325 2018-04-15
bbb 66.4 2018-04-22
bbb 70.25 2018-04-29
ccc 99.43 2018-04-22
ccc 70.35 2018-04-29
ccc 64.4 2018-05-06
ccc 60.325 2018-05-13
ccc 55.35 2018-05-20
ccc 42.35 2018-05-27
基本上,它应该以id(动态读取)分组的第一个日期为准,并以每周的顺序方式在随后的行中填充日期。感谢您的帮助。
答案 0 :(得分:0)
您可以与组一起创建每周序列
library(dplyr)
df %>%
group_by(id, date) %>%
mutate(new_date= seq(as.Date(date[1]), length.out = n(), by = "week"))
# id score date new_date
# <chr> <dbl> <chr> <date>
# 1 aaa 100. 2018-02-25 2018-02-25
# 2 aaa 110. 2018-02-25 2018-03-04
# 3 aaa 113. 2018-02-25 2018-03-11
# 4 aaa 128. 2018-02-25 2018-03-18
# 5 aaa 130. 2018-02-25 2018-03-25
# 6 aaa 135. 2018-02-25 2018-04-01
# 7 aaa 140. 2018-02-25 2018-04-08
# 8 bbb 20.5 2018-03-18 2018-03-18
# 9 bbb 21.5 2018-03-18 2018-03-25
#10 bbb 30.4 2018-03-18 2018-04-01
#11 bbb 49.2 2018-03-18 2018-04-08
#12 bbb 60.3 2018-03-18 2018-04-15
#13 bbb 66.4 2018-03-18 2018-04-22
#14 bbb 70.2 2018-03-18 2018-04-29
#15 ccc 99.4 2018-04-22 2018-04-22
#16 ccc 70.4 2018-04-22 2018-04-29
#17 ccc 64.4 2018-04-22 2018-05-06
#18 ccc 60.3 2018-04-22 2018-05-13
#19 ccc 55.4 2018-04-22 2018-05-20
#20 ccc 42.4 2018-04-22 2018-05-27
答案 1 :(得分:0)
可以使用
您的数据:
x <- structure(list(id = c("aaa", "aaa", "aaa", "aaa", "aaa", "aaa",
"aaa", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb", "ccc",
"ccc", "ccc", "ccc", "ccc", "ccc"), score = c(100.5, 110.46,
113.35, 128.214, 130.123, 134.56, 139.56, 20.5, 21.465, 30.436,
49.24, 60.325, 66.4, 70.25, 99.43, 70.35, 64.4, 60.325, 55.35,
42.35), date = c("2018-02-25", "2018-02-25", "2018-02-25", "2018-02-25",
"2018-02-25", "2018-02-25", "2018-02-25", "2018-03-18", "2018-03-18",
"2018-03-18", "2018-03-18", "2018-03-18", "2018-03-18", "2018-03-18",
"2018-04-22", "2018-04-22", "2018-04-22", "2018-04-22", "2018-04-22",
"2018-04-22")), class = "data.frame", row.names = c(NA, -20L))
x$date <- as.Date(x$date)
一种方法:
library(dplyr)
x %>%
group_by(id) %>%
mutate(date = seq(date[1], by = "week", length.out = n())) %>%
ungroup()
# # A tibble: 20 x 3
# id score date
# <chr> <dbl> <date>
# 1 aaa 100. 2018-02-25
# 2 aaa 110. 2018-03-04
# 3 aaa 113. 2018-03-11
# 4 aaa 128. 2018-03-18
# 5 aaa 130. 2018-03-25
# 6 aaa 135. 2018-04-01
# 7 aaa 140. 2018-04-08
# 8 bbb 20.5 2018-03-18
# 9 bbb 21.5 2018-03-25
# 10 bbb 30.4 2018-04-01
# 11 bbb 49.2 2018-04-08
# 12 bbb 60.3 2018-04-15
# 13 bbb 66.4 2018-04-22
# 14 bbb 70.2 2018-04-29
# 15 ccc 99.4 2018-04-22
# 16 ccc 70.4 2018-04-29
# 17 ccc 64.4 2018-05-06
# 18 ccc 60.3 2018-05-13
# 19 ccc 55.4 2018-05-20
# 20 ccc 42.4 2018-05-27