我正在编写脚本来处理数据,并且需要从数据集中删除一对行之一。在下面的例子中,如果低于20,000,我想保留第一次稀释(总是小于第二次),但如果第一次稀释超过20,000,无论第二次稀释是多少,选择第二次稀释。确切的稀释值会因数据集的不同而不同,但每个患者的稀释度不会超过两次,因此我总是希望先检查最低稀释度,然后再对照20,000的阈值进行检测,结果保持不变。这个数据集也包含很多包含元数据的列。R - 根据条件删除数据帧中每对的一对行之一
Patient Dilution Value
John 2 30000
John 20 15000
George 2 13000
George 20 700
Kelly 2 49000
Kelly 20 24000
Tom 2 80000
Tom 20 30000
Diane 2 700
Diane 20 0
Patient Dilution Value
John 20 15000
George 2 13000
Kelly 20 24000
Tom 20 30000
Diane 2 700
如果你想看看我的代码的其余部分是(是的,我是一个noob)。
###SA Summary
sadf <- merge(mydata, elisadata, "Description", all.x = TRUE)
sadf <- sadf[grep("X", sadf$Type),]
sadf <- sadf[-grep("Blank", sadf$Name),]
sadf <- sadf[-grep("MulV", sadf$Name),]
sadf <- sadf[,c("Isotype","Name","Description","Dilution.x","FI-Bkgd-Neg","Error","Conc..ug.ml.")]
sadf$Error <- as.character(sadf$Error)
sadf$Error[sadf$Conc..ug.ml. < 0.05] <- "LC"
sadf$Conc..ug.ml. <- ifelse(!is.na(sadf$Conc..ug.ml.) & sadf$Conc..ug.ml. < 0.05, NA, sadf$Conc..ug.ml.)
sadf$SA <- with(sadf, sadf$`FI-Bkgd-Neg` * sadf$Dilution.x/sadf$Conc..ug.ml.)
sadf$SA[sadf$SA < 0.02] <- 0.02
if (unique(sadf$Dilution) > 1) {} ###Where I need to put the answer to the question
sadf$`FI-Bkgd-Neg` <- NULL
sadf$Error[is.na(sadf$Error)] <- 0
sadf$Conc..ug.ml.[is.na(sadf$Conc..ug.ml.)] <- 0
sadf <- reshape(sadf, idvar = c("Description","Dilution.x","Isotype","Error","Conc..ug.ml."), timevar = "Name", direction = "wide")
sadf$Error[sadf$Error = 0] <- NA
sadf$Conc..ug.ml.[sadf$Conc..ug.ml. = 0] <- NA
从结果data.frame,我认为你的意思是“如果低于20000,请保持**第一次稀释......”,而不是“最低”。 – alistaire