select 逐行复制两列并在 R 中创建一个新变量

select duplicates from two columns by row and create a new variable in R

我有一个数据框,其中有不同的 ID 和日期副本。我只想检测另一列中的一列重复项,所以我可以说: 1. 删除 T 中具有重复 ID、重复日期和缺失的行(此 table 中的第二条记录)。 2. 然后说:如果有重复的id和重复的日期,就选T=="high".

id<-c("a", "a", "a", "a", "b", "c")
datee<-c("12/02/10", "12/02/10", "12/02/10","10/03/11", "10/04/18","1/04/18" )
T<-c("high", NA, "low","high", "low", "medium")
mydata<-data.frame(id, datee, T)

这是这样的:

id    datee    T
a 12/02/10    high
a 12/02/10 <NA>
a 12/02/10    low
a 10/03/11    high
b 10/04/18    low
c 1/04/18     medium

你可以先这样做:

is_duplicate <- lapply(X = mydata, FUN = duplicated, incomparables = FALSE)
is_na <- lapply(X = mydata, FUN = is.na)

并使用 data.frames 到 f.ex。删除具有重复 ID、重复日期和 T 中缺失的行,如下所示:

drop_idx <- which(is_duplicate$id & is_duplicate$datee & is_na$T)
data[drop_idx, ]

一步一步的解决方案

第 1 步 - 删除缺失

mydata<-mydata[!is.na(mydata[,3]),]

第 2 步 - 识别 ID 上的重复行

dup_rows_ID<-duplicated(mydata[,c(1)],fromLast = TRUE) | duplicated(mydata[,c(1)],fromLast = FALSE)
mydata_dup<-mydata[dup_rows_ID,]

第 3 步 - 在 ID 和 datee 上标识重复的行

dup_rows_ID_datee<-duplicated(mydata_dup[,c(1,2)],fromLast = TRUE) | duplicated(mydata_dup[,c(1,2)],fromLast = FALSE)

第 4 步 - Select T="high"

mydata_dup2<-mydata_dup[mydata_dup[dup_rows_ID_datee,"T"]=="high",]

你的输出

rbind(mydata_dup[rownames(mydata_dup) %in% rownames(mydata_dup2),],
+  mydata[!dup_rows_ID,])
  id    datee      T
1  a 12/02/10   high
4  a 10/03/11   high
5  b 10/04/18    low
6  c  1/04/18 medium

关于ID==a你有两个与T=="high"的约会对象,你必须选择是要约会对象大的还是小的。