我有一个数据帧,我需要根据行中"准相同"的两个值对其进行分离。我只需要删除不同但不相同的观察结果。我尝试使用agrep
,但此函数也删除相同的观察值。
Id<-c("RoLu1976","Rolu1976","RoLu1976","AlBl1989","ThSa1996")
Art<-c("Econometric Policy Evaluation: A Critique","Econometric Policy Evaluations A Critique","Econometric Policy Evaluation: A Critique", "Rules after discretion", "Expectations and the Nonneutrality of Lucas")
Id.1<-c("FiKy1989","FiKy1989","BeBe1983","JoSt1989","JoSt1990")
Art.1<-c("Notes on the Lucas Critique","Notes on the Lucas Critique","The Inconsistency of Optimal Plans","The Inconsistency","Notes on the Lucas")
N<-data.frame(Id,Art,Id.1,Art.1)
上述dataframe
的准相同值在前两次观测的Art
列中,仅s
和:
不同。
在上面的例子中,最终的数据帧应该是(注意没有删除相同的值):
Id Art Id.1 Art.1
RoLu1976 Econometric Policy Evaluation: A Critique FiKy1989 Notes on the Lucas Critique
RoLu1976 Econometric Policy Evaluation: A Critique BeBe1983 The Inconsistency of Optimal Plans
AlBl1989 Rules after discretion JoSt1989 The Inconsistency
ThSa1996 Expectations and the Nonneutrality of Lucas JoSt1990 Notes on the Lucas
我所做的是:
yy = NULL
for(i in 1:length(N$Art)){
temp = agrep(N[i,"Art"],N$Art,value=T)
y = ifelse(any(N[i,"Art"]==temp),temp[1],N[i,"Art"])
yy = c(yy,y)
}
N$Art = yy
N.2 = N[!duplicated(N$Art), ]
但是它删除了两个值:相同的和准相同的。
我该怎么做?
您可以将相同内容的索引存储在原始Art列中,并将其与重复数据删除后的结果结合使用,例如
originallyDuplicated <- duplicated(N$Art)
# then run your snippet to generate `yy`
所以你想摆脱那些重复的东西现在,但不是原来。
N[!(duplicated(yy) & !originallyDuplicated),]
虽然对我来说,似乎不是基于你的排除标准纯粹的Art
列,如果每列在行复制(或几乎复制)表的其他地方排除一行更有意义。(例如,比较Art.1, ID .1, ID等栏?)