【发布时间】:2020-01-07 23:23:35
【问题描述】:
我的数据看起来像这样(但针对 1400 万人)
它是每个人在给定季度 (qtr) 中的 MB 值。如果 qtr == 20091001,则为 2009 年 10 月至 2009 年 12 月期间。
df <- data.frame(
ID = rep(c('ABC1234', 'CED6723', 'GHB9876', "MNR4444", "FRE9823"), 4),
qtr = c(rep('20090101', 5), rep('20090401', 5),rep('20090701', 5),rep('20091001', 5)),
MB = c('0000000', "1234567", "5678910", "1234567",
"9384756", "3456789", NA, '0000000',
"7394857", '0000000', '0000000', '0000000',
"9485967", "9485967", "9485967", '0000000',
'0000000', NA, '4545455', '1987656'
)
)
我想要做的是用最新的 MB 值替换 MB 的值,它是 NA 或 == '0000000'。
规则是: 如果 MB 在 20091001 中为 NA 或 0,我希望该值来自 20090701(如果已填充),然后是 20090401(如果已填充),然后是 20090101。
如果 MB 在 20090701 中为 NA 或 0,我希望该值来自 20090401(如果已填充),然后是 20090101(如果已填充),然后是 20091001。
如果 MB 在 20090401 中为 NA 或 0,我希望该值来自 20090101(如果已填充),然后是 20090701(如果已填充),然后是 20091001。
如果 MB 在 20090101 中为 NA 或 0,我希望该值来自 20090401(如果已填充),然后是 20090701(如果已填充),然后是 20091001。
我的理想输出是这样的
df2 <- data.frame(
ID = rep(c('ABC1234', 'CED6723', 'GHB9876', "MNR4444", "FRE9823"), 4),
qtr = c(rep('20090101', 5), rep('20090401', 5),rep('20090701', 5),rep('20091001', 5)),
MB = c("1234567", "1234567", "5678910", "1234567",
"9384756", "3456789", "3456789", "3456789",
"7394857", "7394857", "7394857", "7394857",
"9485967", "9485967", "9485967", "9485967",
'4545455', '4545455', '4545455', '1987656'
)
)
我看到了这个回复r - copy missing values from other variables 这适用于宽格式的数据。我是否需要将我的数据转换为宽格式,并将 qtr 变量的标签更改为 1、2、3、4 ?或者有没有办法在我的数据框上做到这一点?
谢谢。
【问题讨论】:
-
根据您的描述,听起来您正在从过去(如果有)和未来提取数据。这是故意的吗?
-
你想为每个
ID做这个吗? -
是的,如果过去不可用,则从未来提取数据。是的,我想为任何有 NA 或任何季度值的 ID 执行此操作。谢谢。
标签: r group-by dplyr time-series