【发布时间】:2017-02-15 23:12:18
【问题描述】:
我有一个数据框,我需要根据行中“准相同”的两个值对其进行净化。我只需要删除不同但不相同的观察结果。我尝试使用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
我做的是this:
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), ]
但它会删除两个值:相同和准相同。
我该怎么做?
【问题讨论】:
-
您确定您的标准仅基于“艺术”列吗?假设您的原始
N的第二行有“Art.1”,例如“Foobar”(即不同于其他“重复项”的“Art.1”)。那你还想放弃吗? -
@mathematical.coffee 这将是两个标准:“Art”列在“Art.1”(或任何其他列)中准相同但相同,并删除“Art”中的所有准相同值"(不相同)但在“Art1”中相同。
标签: r dataframe string-matching delete-row