【发布时间】:2016-12-06 08:22:19
【问题描述】:
我是 R 新手,我正在尽我最大的努力(到目前为止;非常好),但我遇到了问题。我有两个数据框,一个是理论值,另一个是实验值,并且数据框的长度不一样。我想比较两个数据框以找到它们之间的匹配值。由于它是理论值与实验值,我需要在匹配值时包含一定程度的误差,例如理论值的±0.5。这就是我遇到问题的地方 - 我不知道如何包含此错误。
数据框很大,但下面是我尝试过的示例。
Theory <- c("195.0882",
"196.0852",
"196.0916",
"300.1600",
"288.1752",
"289.1786",
"290.1819",
"393.2077",
"394.2111")
Experi <- c("195.0312",
"196.0340",
"196.1251",
"288.1856",
"289.1786",
"290.1819")
T <- data.frame(Theory)
E <- data.frame(Experi)
M1 <- merge.default(T, E)
M2 <- match(Theory, Experi)
M2
# [1] NA NA NA NA NA 5 6 NA NA
merge 和 match 都没有出错的余地,而 compare 包似乎也无济于事。
【问题讨论】:
-
github上有一个包叫
fuzzyjoin——你可以在那里找到它——github.com/dgrtwo/fuzzyjoin -
您想尝试将
Theory中的每个值 与Experi中的每个值 进行匹配吗?或者这些值是否按顺序排列,因此只需要比较平行的值对?或者您是否希望为Theory中的每个值最多找到一个匹配项?如果有两个候选人参加比赛,但一个比另一个更接近怎么办? -
我希望从“理论”中的“经验”中找到一个值,但存在一定程度的错误。所以没有必要匹配每个值。而且这些值不是按顺序排列的,所以没有平行对比较。如果有两个候选匹配,我希望 a 可以降低错误级别以仅获得一个匹配。
标签: r dataframe merge compare match