【发布时间】:2019-03-19 02:58:28
【问题描述】:
使用以下可重现的示例:
ID1<-c("a1","a4","a6","a6","a5", "a1" )
ID2<-c("b8","b99","b5","b5","b2","b8" )
Value1<-c(2,5,6,6,2,7)
Value2<- c(23,51,63,64,23,23)
Year<- c(2004,2004,2004,2004,2005,2004)
df<-data.frame(ID1,ID2,Value1,Value2,Year)
我想选择 ID1 和 ID2 以及 Year 在它们各自的列中具有相同值的行。对于这一行,我想比较重复行中的 Value1 和 Value2 ,如果值不同,则擦除具有较小值的行。
预期结果:
ID1 ID2 Value1 Value2 Year new
2 a4 b99 5 51 2004 a4_b99_2004
4 a6 b5 6 64 2004 a6_b5_2004
5 a5 b2 2 23 2005 a5_b2_2005
6 a1 b8 7 23 2004 a1_b8_2004
我尝试了以下方法: 查找我感兴趣的条件的唯一标识符
df$new<-paste(df$ID1,df$ID2, df$Year, sep="_")
我可以使用唯一标识符来查找数据库中包含重复项的行
IND<-which(duplicated(df$new) | duplicated(df$new, fromLast = TRUE))
在for循环中,如果唯一标识符重复比较值并删除行,但循环太复杂,我无法解决。
for (i in df$new) {
if(sum(df$new == i)>1)
{
ind<-which(df$new==i)
m= min(df$Value1[ind])
df<-df[-which.min(df$Value1[ind]),]
m= min(df$Value2[ind])
df<-df[-which.min(df$Value2[ind]),]
}
}
【问题讨论】:
标签: r if-statement duplicates