在R中查找早于特定日期的最新数据

菲尔

我有两个data.frames(分别称为dataset.newdataset.old),它们都包含有关某些个人的信息。这些人都在两个data.frames中都有一个标识号(我们可以将其称为“个体”变量),并且每个帧都有有关数据收集时间的信息,存储在我们称为“ some.date”的列中。 ”。

这两个data.frames(dataset.old)中的第二个包含有关个体的历史数据,即在其他时间测量的某些其他变量的值,因此每个个体在dataset.old中出现多次。

我想做的是以下几点。对于dataset.new中的每个人,从dataset.old中找到最新的行,但仍比dataset.new中的观测值旧。对于dataset.old中没有此类日期的个人,我希望它返回NA。

这可能是通过下面提供的一些示例数据最容易说明的。

dataset.new 
 individual  some.date
1         1 2016-05-01
2         2 2016-01-28
3         7 2016-03-03

dataset.old
   individual  some.date
1           1 2016-01-12
2           1 2015-12-30
3           1 2016-04-27
4           1 2016-05-02
5           2 2015-11-15
6           2 2012-01-27
7           2 2016-02-06
8           3 2016-04-30
9           3 2016-01-27
10          4 2016-03-01
11          4 2011-01-16

在此示例中,我正在寻找一种获取以下输出的方法:

individual row.nr
1          1      3
2          2      5
3          7     NA

因为这些行对应于dataset.old中的最新数据,但仍早于dataset.new中的数据。

我有一个可以解决问题的代码,但是对于我要记住的数据来说太慢了(dataset.new中有超过2万行,dataset.old中有很多行)。我的解决方案基本上是遍及所有个人的循环,在每个阶段对数据进行细分。

find.previous <- function(dataset.old, individual, some.new.date){
  subsetted.dataset <- dataset.old[dataset.old[, "individual"] == individual, ] # We only look at the individual in question.
  subsetted.dataset <- subsetted.dataset[subsetted.dataset[, "some.date"] < some.new.date, ]# Here we get all the rows that have data that are measured BEFORE timepoint.
  row.index <- which.min(some.new.date - subsetted.dataset[, "some.date"]) # This can be done, since we have already made sure that fromdatum < timepoint.
  ifelse(length(row.index)!= 0, as.integer(rownames(subsetted.dataset[row.index,])), NA) # Then we output the row that had that information.
}

output <- matrix(ncol=2, nrow=0)
for(i in 1:nrow(dataset.new)){
  output <- rbind(output, cbind(dataset.new[, "individual"][i], find.previous(dataset.old, dataset.new[, "individual"][i], dataset.new[, "some.date"][i])))
}
colnames(output) <- c("individual", "row.nr")
output

任何有关如何解决此问题的帮助将不胜感激。我尝试使用我的Google技能以及在此处stackoverflow上阅读其他文章,但没有成功。

可以通过复制以下代码行来复制示例数据:

dataset.new <- data.frame(individual=c(1, 2, 7), some.date=as.Date(c("2016-05-01", "2016-01-28", "2016-03-03")))
dataset.old <- data.frame(individual=c(1,1,1,1,2,2,2,3,3,4,4), some.date=as.Date(c("2016-01-12", "2015-12-30", "2016-04-27", "2016-05-02", "2015-11-15", "2012-01-27", "2016-02-06", "2016-04-30", "2016-01-27", "2016-03-01", "2011-01-16")))
德克斯·格罗夫斯

您可以通过合并有效地解决此问题。

首先在数据集.old中创建所需的行号变量。然后dataset.new合并dataset.old(左联接或merge(lhs, rhs, all.x = TRUE))。这可以使您:

dataset.old
   individual   new.date    old.date    old.rownumber
1           1   2016-05-01  2016-01-12              1
2           1   2016-05-01  2015-12-30              2
3           1   2016-05-01  2016-04-27              3
4           1   2016-05-01  2016-05-02              4
5           2   2016-01-28  2015-11-15              5
6           2   2016-01-28  2012-01-27              6
7           2   2016-01-28  2016-02-06              7 
8           7   2016-03-03          NA             NA

子集为new.date > old.dateis.na(old.date)

dataset.old
   individual   new.date    old.date    old.rownumber
1           1   2016-05-01  2016-01-12              1
2           1   2016-05-01  2015-12-30              2
3           1   2016-05-01  2016-04-27              3
5           2   2016-01-28  2015-11-15              5
6           2   2016-01-28  2012-01-27              6
8           7   2016-03-03          NA             NA

的子集old.date == max(old.date)is.na(old.date)由分组individual

dataset.old
   individual   new.date    old.date    old.rownumber
3           1   2016-05-01  2016-04-27              3
6           2   2016-01-28  2012-01-27              5
8           7   2016-03-03          NA             NA

编辑:我偏爱data.table代码如下所示:

dataset.old[, old.rownumber := 1:.N]

setnames(dataset.old, "some.date", "old.date")
setnames(dataset.new, "some.date", "new.date")

dataset.merge <- merge(dataset.old, dataset.new, by = "individual", all.x = TRUE)

dataset.merge <- dataset.merge[, new.date > old.date]
dataset.merge[old.date == max(old.date) | is.na(old.date), by = individual]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 R 数据框中查找特定日期

来自分类Dev

在mongodb中查找特定日期的数据

来自分类Dev

如何在UNIX中查找和删除早于特定日期的文件?

来自分类Dev

如何在UNIX中查找和删除早于特定日期的文件?

来自分类Dev

Python Pandas Dataframe-如果索引日期早于特定日期,则从数据框中删除数据

来自分类Dev

在MySql中查找特定日期

来自分类Dev

在JIRA中查找特定日期的问题

来自分类Dev

在dateTimeArray中查找特定日期的索引

来自分类Dev

查找特定日期的最新股票报价

来自分类Dev

如何创建zip / gz / tar文件,以确定文件是否早于UNIX或Linux中的特定日期

来自分类Dev

如何根据文件路径中的目录递归删除早于特定日期的 *.bak 文件?

来自分类Dev

从SQLite中的特定日期检索数据

来自分类Dev

如何在R中的大文件中查找与特定日期相对应的UNIX时间

来自分类Dev

Bash Shell脚本FOR遍历早于特定日期的文件

来自分类Dev

FTP-在Filezilla中查找特定日期的修改文件

来自分类Dev

如何创建zip / gz / tar文件,用于确定文件是否早于UNIX或Linux中的特定日期

来自分类Dev

将目录/文件输入到文本文件中,然后显示早于特定日期的文件

来自分类Dev

在给定日期时间之前查找列表中的最新日期时间

来自分类Dev

特定日期缺失数据

来自分类Dev

选择特定日期的数据

来自分类Dev

如何在Python中的日期排序列表中查找介于特定日期之间的日期?

来自分类Dev

如何删除Pandas数据框中特定日期的行?

来自分类Dev

从熊猫数据框中消除特定日期的最快方法

来自分类Dev

查询Laravel 4中特定日期范围的数据记录

来自分类Dev

如何备份特定日期和时间的mysql中的数据?

来自分类Dev

为熊猫中的特定日期范围过滤数据框

来自分类Dev

计算特定日期 [R]

来自分类Dev

在R中的另一个数据框中选择日期最接近特定日期的行

来自分类Dev

汇总以按特定日期查找文档

Related 相关文章

  1. 1

    从 R 数据框中查找特定日期

  2. 2

    在mongodb中查找特定日期的数据

  3. 3

    如何在UNIX中查找和删除早于特定日期的文件?

  4. 4

    如何在UNIX中查找和删除早于特定日期的文件?

  5. 5

    Python Pandas Dataframe-如果索引日期早于特定日期,则从数据框中删除数据

  6. 6

    在MySql中查找特定日期

  7. 7

    在JIRA中查找特定日期的问题

  8. 8

    在dateTimeArray中查找特定日期的索引

  9. 9

    查找特定日期的最新股票报价

  10. 10

    如何创建zip / gz / tar文件,以确定文件是否早于UNIX或Linux中的特定日期

  11. 11

    如何根据文件路径中的目录递归删除早于特定日期的 *.bak 文件?

  12. 12

    从SQLite中的特定日期检索数据

  13. 13

    如何在R中的大文件中查找与特定日期相对应的UNIX时间

  14. 14

    Bash Shell脚本FOR遍历早于特定日期的文件

  15. 15

    FTP-在Filezilla中查找特定日期的修改文件

  16. 16

    如何创建zip / gz / tar文件,用于确定文件是否早于UNIX或Linux中的特定日期

  17. 17

    将目录/文件输入到文本文件中,然后显示早于特定日期的文件

  18. 18

    在给定日期时间之前查找列表中的最新日期时间

  19. 19

    特定日期缺失数据

  20. 20

    选择特定日期的数据

  21. 21

    如何在Python中的日期排序列表中查找介于特定日期之间的日期?

  22. 22

    如何删除Pandas数据框中特定日期的行?

  23. 23

    从熊猫数据框中消除特定日期的最快方法

  24. 24

    查询Laravel 4中特定日期范围的数据记录

  25. 25

    如何备份特定日期和时间的mysql中的数据?

  26. 26

    为熊猫中的特定日期范围过滤数据框

  27. 27

    计算特定日期 [R]

  28. 28

    在R中的另一个数据框中选择日期最接近特定日期的行

  29. 29

    汇总以按特定日期查找文档

热门标签

归档