如何在一列中找到重复项并在新列中标记它们,具体根据第三列的日期顺序使用R

  • 本文关键字:日期 顺序 三列 一列 新列中 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 中定义(

  • 重复的较低日期在newcolumn中标记为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。

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循环根据日期的最大分配其他值

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
}

那应该做

最新更新