如何使用R在第三列中根据日期顺序在一列中查找重复项并将它们标记在新列中

时间:2019-06-27 19:12:58

标签: r duplicates

我有一个看起来像这样的数据框

idnr       date
a43        2011-12-19
a4945      2012-09-11
a43        2013-10-01
a231       2012-05-09
a231       2009-09-10
a6901      2015-06-12

我想要(重复项仅在idnr中定义

  • 在新列中将重复项的下限日期标记为2
  • 重复项的较高日期标记为1
  • 非重复项标记为2:

同样,重复项仅在idnr列中定义。

   idnr       date          newcolumn
   a43        2011-12-19    2
   a4945      2012-09-11    2
   a43        2013-10-01    1
   a231       2012-05-09    1
   a231       2009-09-10    2
   a6901      2015-06-12    2

或者,如果您愿意,我希望第二个报告的重复项在newcolumn中标记为1,其余的标记为2。

1 个答案:

答案 0 :(得分:0)

library(dplyr)

首先创建您的表格

table <- data.frame(indr = c('a43','a4945', 'a43', 'a231', 'a231', 'a6901'),
                date = c(as.Date('2011-12-19'), as.Date('2012-09-11'),  as.Date('2013-10-01'),
                as.Date('2012-05-09'), as.Date('2009-09-10'), as.Date('2015-06-12')))

然后我们确定重复项

duplicates <- as.character(table$indr[duplicated(table$indr)])

然后,我们为每个唯一值分配2:

table$newcolumn[!table$indr %in% duplicates] <- 2

最后,您可以使用for循环根据日期的最大值分配其他值

for(i in duplicates){
temp_table <- filter(table, indr == i)
high_date <- max(temp_table$date)
#now we assign the values
table$newcolumn[table$indr == i & table$date == high_date] <- 1
table$newcolumn[table$indr == i & table$date != high_date] <- 2
}

那应该做