根据多个选择条件匹配的两个不同数据框中的行构建第三个数据框

巴克

我想检查一个数据帧(“apx”)中是否有任何行,其中 apx 中“AD”列中的条目与另一个数据帧(“npx”)中“AD”列中的条目匹配,并且,其中匹配行中的 SD 条目在另一个的 13 个单位内。

我在 SO 上检查了几个不同的参考资料,但由于我需要构建第三个数据框(和其他原因)而找不到答案。

我的工作试验是这样的...

       npx <- data.frame(TN = c(111, "Z2", 4, "fox", 34256, 4782, "ZGJU45"), 
              SD=c( 100, 200, 100, 600, 500, 115, 455), 
              AD=c( "34YY", "37PD", "123M", "235W", "37PD", "123M", "1WW"))


       apx <- data.frame(TN = c(222, "X34", 5, "bear", 47789, 37281, "VF456"), 
              SD = c(101, 201, 310, 450, 515, 660, 505), 
              AD = c("123M", "23XY", "5S S", "1WW", "27 30R", "14M", "37PD"))

注意:AD 条目“123M”、“1WW”和“37PD”出现在 apx 和 npx 中。第一个和第三个在 npx 中出现两次。

保险系数更改为字符:

       i <- sapply(apx, is.factor)
       apx[i] <- lapply(apx[i], as.character)
       i <- sapply(npx, is.factor)
       npx[i] <- lapply(npx[i], as.character)

我的第五次尝试......(强制 SD 条目为整数)......

      test5 <- apx[which(apx$AD == npx$AD &
                 as.integer(npx$SD) - as.integer(apx$SD) < 13) 
         %in% as.integer(npx$SD), ]

我之前的尝试之一......

      test3 <- apx[which(apx$AD == npx$AD &
                 as.integer(npx$SD) - as.integer(apx$SD) < 13) 
         %in% setequal(npx$SD, apx$SD), ]

我在第三个数据框中寻找的是......

             TN     SD     AD
      [1]    222   101    123M   

因为在 npx 的第三行中找到了 123M(apx 的第一行),并且 SD 的对应条目彼此在 13 个单位内(100 和 101);但是,在 npx 中第二次出现 123M 时(在第 6 行),SD 的相应条目之间的差异相距 15 个单位。实际上,我只是在寻找那些 npx 中的 SD 条目比 apx 中的相应 SD 条目大(仅)< 13 的那些实例。

       [2]    bear  450    1WW    

因为在 npx 的最后一行中找到了 1WW(apx 的第 4 行),并且 SD 的相应条目彼此相差 13 个单位(450 和 455)。

       [3]    VF456 505    37PD

虽然在 npx 的第二行中发现了 37PD(apx 的最后一行),但该条目不符合 37PD 的质量,因为相应的 SD 值相距超过 13 个单位(200 和 505);但是,npx(第 5 行)中 37PD 的另一个出现的 SD 的相应条目彼此相差 13 个单位,从而使 37PD 有资格出现在结果数据帧中。

我咬紧牙关期待有人向我展示一个非常简单的方法来做到这一点,但宁愿忍受那种尴尬而不是旋转更多的轮子。提前致谢。

弹力球

如果我了解您要做什么,我认为我们可以使用mergesubset功能:

merge_df <- merge(npx, apx, by = 'AD', suffixes = c('npx','apx'))

subset(merge_df, SDnpx - SDapx <= 13 & SDnpx >= SDapx)

   AD  TNnpx SDnpx TNapx SDapx
3 1WW ZGJU45   455  bear   450

但我承认,我实际上并不太明白你试图强制执行的条件是什么。如果我们对 SD 差异 <= 13 的行感兴趣,那么我们可以执行以下操作:

subset(merge_df, abs(SDnpx - SDapx) <= 13)

    AD  TNnpx SDnpx TNapx SDapx
1 123M      4   100   222   101
3  1WW ZGJU45   455  bear   450
5 37PD  34256   500 VF456   505

然后将数据转换为最终所需的形式(这也不太清楚)只是重命名和/或从data.frame.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据应用于两个数据框的条件创建第三个数据框

从两个不同数据框中的列中求和和百分比,并将结果附加到第三个数据框中

基于第三个数据框中匹配值的具有新布尔值列的两个数据框的乘积

如果数据中的前两个值小于数据中的第三个值,则如何根据返回值的条件过滤数据框?

Pandas 检查两个数据框列并访问第三个值

比较两个数据框列并输出第三个

有两个数据框,如何创建第三个

以第三个为x轴绘制两个数据框列

使用第三个值从数据框中提取两个值

R:根据跨三个不同列的映射值合并两个数据框

Python/pandas:从两个数据帧中查找匹配值并返回第三个值

使用两个表中的条目从第三个表中选择数据

将两个csv文件与python pandas比较,并使用产生的数据框创建第三个文件

根据第三个表的数据连接两个表

Java映射两个数组中的数据并将其插入第三个数组

将两个不同的数据类列表合并到第三个 Kotlin

SQL:从两个表中选择与第三个表相关的数据

比较数据表并将不匹配的行保存在第三个数据表中

根据第三列中的条件合并两个数据框

比较两个或三个数据框中的列值并合并

如何从两个DataGridViews中获取数据到第三个DataGridView中?

如何从两个相关表中获取数据并放入第三个表

熊猫:根据两个条件匹配加入两个数据框

将两个列表框中的项目组合到第三个列表框中

在第三个文本框中显示两个文本框文本

将两个数据库合并为第三个数据库

根据数据框中两个不同列之间的匹配来删除行

Python:根据第三个数组对两个数组进行排序

如何根据每个数据框中两个不同日期列的日期条件合并两个数据框?