【发布时间】:2017-12-28 13:44:11
【问题描述】:
我有一个这样的 DF:
Date <- c("10/17/17","11/11/17","11/23/17","11/25/17","12/3/17","12/10/17","12/16/17")
Ben <- c("1294",NA,"8959","2345",NA,"0303",NA)
James <- c(NA,"4523","3246",NA,"2394","8877","1427")
Alex <- c("3754","1122","5582",NA,"0094",NA,NA)
df1 <- data.frame(Date,Ben,James,Alex)
#df1
Date Ben James Alex
10/17/17 1294 NA 3754
11/11/17 NA 4523 1122
11/23/17 8959 3246 5582
11/25/17 2345 NA NA
12/3/17 NA 2394 0094
12/10/17 0303 8877 NA
12/16/17 NA 1427 NA
如您所见,DF 是按日期排序的。我正在尝试将每列的最新日期后 2 周内的值放入新的 DF 中,如下所示:
#df2
Ben James Alex
0303 1427 0094
NA 8877 5582
NA 2394 NA
Ben 只有一个列出的值,因为在 2017 年 12 月 10 日的 2 周内只有一个非 NA 值,这是 Ben 的列中具有非 NA 值的最新日期。詹姆斯最近的非北美日期是 17 年 12 月 16 日。他的三个值都在该日期的两周内:1427、8877 和 2394。Alex 的最新日期是 12/3/17。他在最近日期的两周内有两个值:0094 和 5582。新 data.frame 的行数应该等于最长的列。在各自的两周范围内条目较少的列应使用 NA 来填充数据,例如 Ben 的列。
我目前正在使用以下代码,它只是过滤每列中的最后 3 个非 NA:
df2 <- lapply(df1[-1], function(x) tail(x[!is.na(x)], n = 3))
【问题讨论】:
-
请以可重现的方式分享您的数据集(使用
dput函数)。 -
您能否给出您希望从上面的示例中看到的完整输出?我还看到日期
11/23/17和11/29/17在两周之内,11/29/17和12/10/17也在两周之内,但12/10/17和11/23/17不在两周之内。所以请说明你的确切日期需要以及你如何需要它 -
df2 代表我正在寻找的基于 df1 中给出的数据的完整输出。
标签: r