【发布时间】:2020-12-03 15:47:46
【问题描述】:
我有一个时间序列数据,我试图在其中获取每个 ID 的最新有效响应。这是我的起始测试数据集:
dta <- data.frame(
uniqueID = c("950513","950513", "950513","951634","951634", "951634","951640","951640", "951640",
"951641","951641", "951641","951646","951646", "951646","952732","952732", "952732",
"952895", "952895", "952895","952909","952909", "952909","952910","952910", "952910",
"952911","952911", "952911"),
year = c(2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016,
2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016),
var1 = c(2115, NA, 2115,NA, NA, NA, NA, 2903, NA, NA, 6040, 6040, 6103, 6103, 6268, 6511, 7101, 7101,
7105, 7105, 7105,8901, 8520, 8901, 8540, 8540, NA, 8854, 2108, NA),
var2 = c(2115, "", 2115,"", "", "", "", 2903, "", "", 6040, 6040, 6103, 6103, 6268, 6511, 7101, 7101,
7105, 7105, 7105,8901, 8520, 8901, 8540, 8540, "", 8854, 2108, ""),
var3 = c("turtle", "turtle", "turtle","", "tortoise","", "turtle", "", "", "", "turtle", "tortoise",
"tortoise", "tortoise", "", "", "turtle", "", "turtle", "tortoise", "turtle", "tortoise", "", "",
"", "", "", "tortoise", "turtle", "tortoise"),
var4 = c("", "", "", "", "", "", "", "yellow", "", "blue", "", "", "", "", "", "", "", "red", "red", "", "",
"", "", "", "pink", "", "", "", "", "")
)
我希望每个 uniqueID 都有一个,我将在其中获得最新(按年份)的响应,其中包含所有列 var1-var4 的该 ID 的最完整信息。一步一步,这是我想做的:
- 每个唯一ID 有一行输出
- 默认情况下,选择最近一年(行)的响应(响应在 var1 - var4 中)
- 如果最近一年的响应 (var1-var4) 有缺失值或空白,请忽略该 ID 的同一列中的不同值,必要时折叠年份。例如2014&2015
根据我的测试数据集,我希望数据集最终看起来像这样:
result <- data.frame(
uniqueID = c("950513","951634","951640","951641","951646","952732","952895","952909","952910",
"952911"),
year = c("2016","2015","2015&2014","2016&2014", "2016&2015", "2016&2015", "2016&2014", "2016&2014", "2015&2014", "2016&2015" ),
var1 = c(2115,NA,2903, 6040, 6268, 7101, 7105, 8901, 8540, 2108),
var2 = c(2115,"", 2903, 6040, 6268, 7101, 7105, 8901, 8540, 2018),
var3 = c("turtle","tortoise", "turtle", "tortoise", "tortoise", "turtle", "turtle", "tortoise","", "tortoise"),
var4 = c("","", "yellow", "blue", "", "red", "red", "", "pink", "")
)
或者,年份可以拆分为多个列 year1、year2。
我使用 data.table 尝试了几种不同的解决方案,但这些解决方案通常专注于最近一年或最完整的案例,但不是两者兼而有之。如果需要,很乐意提供更多说明。
【问题讨论】:
标签: r dplyr data.table