我有一个看起来像这样的数据框架
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
}
那应该做