首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据最近的日期选择行,同时满足R中的其他标准

根据最近的日期选择行,同时满足R中的其他标准
EN

Stack Overflow用户
提问于 2016-05-05 11:40:25
回答 1查看 548关注 0票数 0

我有一个如下所示的数据集:

代码语言:javascript
复制
data <- read.table(text = "OID      Local_date      Dateincide      Join_Count      TARGET_FID      JOIN_FID        indiv_code      indiv_name      sex     month       year        treatment       perturbati      xx      yy      id_treatme      id_treat_1      lion_month      treatment_      OID_hc      DateRecord      Year_1      location        village     Longhomest      Lathomeste      Longitude       Latitude        Animalslos      Specieslos
3   2015-10-25  2008-01-15  1   127415  2   NGAaF1  Ngamo_Urchin    F   10  2015    E   A   547514.43970000000  7883074.46200000000 11  11E NGAaF1_10_2015  11E_NGAaF1_10_2015  3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle
3   2016-01-18  2008-01-15  1   128429  2   NGAaF1  Ngamo_Urchin    F   1   2016    E   A   547461.30170000000  7882858.82600000000 11  11E NGAaF1_1_2016   11E_NGAaF1_1_2016   3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle
3   2016-02-23  2008-01-15  1   128858  2   NGAaF1  Ngamo_Urchin    F   2   2016    E   A   547395.24460000000  7883056.29100000000 11  11E NGAaF1_2_2016   11E_NGAaF1_2_2016   3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle
3   2015-10-25  2008-01-15  1   130659  2   NGAaF1  Ngamo_Urchin    F   10  2015    E   A   547514.43970000000  7883074.46200000000 12  12E NGAaF1_10_2015  12E_NGAaF1_10_2015  3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle
3   2016-01-18  2008-01-15  1   131673  2   NGAaF1  Ngamo_Urchin    F   1   2016    E   A   547461.30170000000  7882858.82600000000 12  12E NGAaF1_1_2016   12E_NGAaF1_1_2016   3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle
3   2016-02-23  2008-01-15  1   132102  2   NGAaF1  Ngamo_Urchin    F   2   2016    E   A   547395.24460000000  7883056.29100000000 12  12E NGAaF1_2_2016   12E_NGAaF1_2_2016   3   19-02-08    2008    E   Nganyana    548505  7881998 547800  7883200 4   cattle", header = TRUE)

每一行都是一个带有代码"OID""Local_date""Dateincide"和其他属性的记录。我有丢失的数据,现在不是编码为NA,而是空白。原始数据集很大,有120,000行和40列,这就是为什么我试图找到一个R代码,它将以最有效的方式执行以下操作:

我希望遍历OID值,并对共享相同OID的所有行查找"Dateincide"最接近"Local_date"的行。然后在一个名为"Keep/delete"的新列中为这些具有最近日期的行编写“保存”。

但是有一个条件:有些行将具有相同的OID,并且具有相同的"Local_date",因此在某些情况下,似乎会有两个或更多的记录是相同的匹配。我希望保留所有这些匹配,而不仅仅是一次,因为它们根据"id_treat_1“列表示不同的记录。

我想要的输出如下(我已经简短地说明了这一点,但我也希望保留所有其余的列):

代码语言:javascript
复制
OID Local_date  Dateincide  keep/delete id_treat_1
3   2015-10-25  2008-01-15  keep        11E
3   2016-01-18  2008-01-15  delete      11E 
3   2016-02-23  2008-01-15  delete      11E 
3   2015-10-25  2008-01-15  keep        12E 
3   2016-01-18  2008-01-15  delete      12E 
3   2016-02-23  2008-01-15  delete      12E 
13  2011-11-08  2008-02-14  keep        7E

因此,有两个具有相同OID= 3的记录被标记为“保持”,因为它们在"Local_date“中的日期与"Dateincide”最近,并且在"id_treat_1“列中有不同的值。在使用OID 13的记录中,选择了日期最近的行,而且只有一行,因为在"id_treat_1“列中没有另一个匹配项的值不同。

任何关于如何计算这个允许多个匹配的“保持/删除”列的帮助,以及如何处理丢失的数据,都将非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-05 12:14:12

您需要将您的日期转换为POSIXct,以便可以减去它们。然后可以使用dplyr创建“保持/删除”列。

代码语言:javascript
复制
library(dplyr)
data$Local_date <- as.POSIXct(data$Local_date,
                                format='%Y-%m-%d')
data$Dateincide <- as.POSIXct(data$Dateincide,
                                format='%Y-%m-%d')
data %>% 
  group_by(OID) %>% 
   mutate(keep.delete = 
        ifelse(Local_date - Dateincide == min(Local_date - Dateincide), 'keep', 'delete'))

#     OID Local_date Dateincide id_treat_1 keep.delete
#  (int)     (time)     (time)      (dbl)       (chr)
#1     3 2015-10-25 2008-01-15         11        keep
#2     3 2016-01-18 2008-01-15         11      delete
#3     3 2016-02-23 2008-01-15         11      delete
#4     3 2015-10-25 2008-01-15         12        keep
#5     3 2016-01-18 2008-01-15         12      delete
#6     3 2016-02-23 2008-01-15         12      delete

对于id_treat_1约束,可以将上述内容保存为新的数据框架(例如data3),然后执行以下操作

代码语言:javascript
复制
data3$keep.delete[duplicated(data3)] <- 'delete'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37049676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档