我有两个数据帧,一个具有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)
并使用所有这些近似值创建一个新的数据框。你能建议一些帮助吗?
答案 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 ]