如何根据上一行中的月份连续增加一个月?
How to increment a month in a row based on the month in the previous row?
我有一个包含值列和 "month year" 列的数据框。在第一行 Aug 2018 是为 month year 列写的。是否有可能在值列中具有值的以下行分别自动填充下个月?那么第二行是 2018 年 9 月,第三行是 2018 年 10 月等等?
实际结果:
value month
645 Aug 2018
589 NA
465 NA
523 NA
632 NA
984 NA
预期结果:
value month
645 Aug 2018
589 Sep 2018
465 Okt 2018
523 Nov 2018
632 Dez 2018
984 Jan 2019
在 base R 中,你可以做这样的事情来创建每月 seq
uence
df$month <- format(seq(as.Date(paste("01", df$month[1]), "%d %b %Y"),
length.out = nrow(df), by = "month"), "%b %Y")
df
# value month
#1 645 Aug 2018
#2 589 Sep 2018
#3 465 Oct 2018
#4 523 Nov 2018
#5 632 Dec 2018
#6 984 Jan 2019
这里要注意的重要假设是第一行中只有一个 month
值,并且您希望通过从上一个条目递增 1 个月来替换月份的所有其他值。
我们可以用 zoo
中的 as.yearmon
来做到这一点。使用的包版本 1.8.3
library(zoo)
df$month <- head(as.yearmon(df$month[1]) + c(0, seq_len(nrow(df)))/12, -1)
df
# value month
#1 645 Aug 2018
#2 589 Sep 2018
#3 465 Oct 2018
#4 523 Nov 2018
#5 632 Dec 2018
#6 984 Jan 2019
数据
df <- structure(list(value = c(645L, 589L, 465L, 523L, 632L, 984L),
month = c("Aug 2018", NA, NA, NA, NA, NA)), class = "data.frame",
row.names = c(NA, -6L))
我有一个包含值列和 "month year" 列的数据框。在第一行 Aug 2018 是为 month year 列写的。是否有可能在值列中具有值的以下行分别自动填充下个月?那么第二行是 2018 年 9 月,第三行是 2018 年 10 月等等?
实际结果:
value month
645 Aug 2018
589 NA
465 NA
523 NA
632 NA
984 NA
预期结果:
value month
645 Aug 2018
589 Sep 2018
465 Okt 2018
523 Nov 2018
632 Dez 2018
984 Jan 2019
在 base R 中,你可以做这样的事情来创建每月 seq
uence
df$month <- format(seq(as.Date(paste("01", df$month[1]), "%d %b %Y"),
length.out = nrow(df), by = "month"), "%b %Y")
df
# value month
#1 645 Aug 2018
#2 589 Sep 2018
#3 465 Oct 2018
#4 523 Nov 2018
#5 632 Dec 2018
#6 984 Jan 2019
这里要注意的重要假设是第一行中只有一个 month
值,并且您希望通过从上一个条目递增 1 个月来替换月份的所有其他值。
我们可以用 zoo
中的 as.yearmon
来做到这一点。使用的包版本 1.8.3
library(zoo)
df$month <- head(as.yearmon(df$month[1]) + c(0, seq_len(nrow(df)))/12, -1)
df
# value month
#1 645 Aug 2018
#2 589 Sep 2018
#3 465 Oct 2018
#4 523 Nov 2018
#5 632 Dec 2018
#6 984 Jan 2019
数据
df <- structure(list(value = c(645L, 589L, 465L, 523L, 632L, 984L),
month = c("Aug 2018", NA, NA, NA, NA, NA)), class = "data.frame",
row.names = c(NA, -6L))