如何从两个数据框中找到不同行数中的近似关闭值?

时间:2019-06-19 05:07:06

标签: r dataframe

我有两个数据帧,一个具有24行* 2列,另一个具有258行* 2列。这些列相似,我对一列感兴趣,想在两个数据框中找到彼此接近的值?

我正在尝试模拟光谱并与实验进行比较。

df_exp <- data.frame("Name"=c(exp,Int), "exp" = c(x1, x2, x3, ...,x258),"int"= c(y1,y2,y3,...,y258))

df_sim <- data.frame("Name"=c(sim,Int), "sim" = c(x1, x2, x3, ...,x24),"int" = c(y1,y2,y3,...,y24))

初始值(exp的{​​{1}}列和df_exp的{​​{1}}列):

sim

我尝试了这个r代码

df_sim

此代码为我提供了所有零值,因为没有精确匹配。数字始终以小数位变化。我试图将数字四舍五入到小数点后零位,并找到接近的值。但这不是我的意图。我想找到exp sim 206.0396 182.0812 207.1782 229.1183 229.0776 246.1448 232.1367 302.1135 241.1050 319.1401 246.1691 357.1769 250.0235 374.2034 ... ... match(df_exp$exp[1:258], df_sim$sim[1:24], nomatch = 0) 并使用所有这些近似值创建一个新的数据框。你能建议一些帮助吗?

1 个答案:

答案 0 :(得分:0)

您可以定义一个相似性截止点并在其上循环:

### define your cutoff for similarity
cutoff <- 0.01
### initialize vectors to store the similar values
similar_sim <- vector(); similar_exp <- vector();
### open loop over both DF values
for (sim_value in df_sim$sim) {
  for (exp_value in df_exp$exp) {
    ### if similar (< cutoff) append values to vectors
    if ( abs(sim_value - exp_value) < cutoff ) {
      similar_sim <- append(similar_sim, sim_value)
      expilar_exp <- append(expilar_exp, exp_value)
    }
  }
}
### recreate a DF with the similar values
similar_df <- as.data.frame(cbind(similar_sim, similar_exp))

如果您想保存一个听起来与另一个相似的每个值。否则,您可以跳过循环并使用范围选择,例如:

x[ x < x+cutoff & x > x-cutoff ]