【发布时间】:2019-10-23 14:07:47
【问题描述】:
我对 R 比较陌生。我正在寻找一种方法来根据某些条件从站点的两个点数据集中选择 pfaf 的特定值。 data2 是 data1 的子集。但我只包含了一个匹配的值。
数据1:
site id strahler pfaf
1331879 1232926 4 4359
1331341 1232926 2 816
1330121 1232926 1 45
1331842 1232926 3 4
1331841 1232926 2 552
1329931 1206877 3 413
1329614 1206877 2 47
1329591 1206877 1 8179
1329517 1206877 1 4463
1331411 1554221 1 912
1331364 1554221 1 92
1329694 1554221 2 9113
1331486 1554221 3 8
我需要从 data1 中获取与一系列 pfaf 数字相对应的网站系列(几个)。这些 pfaf 号码需要遵循这些规则。
1) data2$pfaf 的前 n 位与 data1$pfaf 完全匹配,其中 n ≥ 0,AND
2) data2$pfaf 的剩余位数小于和/或等于data1$pfaf 的剩余位数
同时,data2$pfaf 和 data1$pfaf 的 id 需要相同才能进行比较。并且站点的 strahler 必须小于或等于点的 strahler。
数据2:
points id strahler pfaf
1331485 1206877 3 821
1329690 1206877 2 47
1329598 1232926 4 46
1329936 1554221 1 962
正确的输出是:
points pfaf_of_site site
1331485 816, 8179 1329614, 1329591
1329690 4463 1329517
1329598 4359, 45, 4 1331879, 1330121, 1331842
1329936 912, 92 1331411, 1331364
如果有人可以做到这一点,非常感谢您的帮助。
【问题讨论】:
-
请 (1) 举一个
data2$PFAFFSTETTER的小例子(3 行就足够了)。 (2) 告诉我们更多关于n...n有具体的价值吗?或者你想最大化n?或者您想为n的不同值运行? (3) 根据您提供的示例输入显示您的预期输出。 -
输出我想要 data2 中所有带有 PFAFSTETTER 编号的 WSO1_ID,它对应于 data1 中 WSO1_ID 的 PFAFSTETTER 编号,因为 data2 是完整的数据集。所有搜索都需要基于相同的 WSO_ID。 n 是任何 PFAFSTETTER 数的第一个数。因此,如果是 821,那么我需要所有数字,例如 834、86611、822。这是一个足够好的例子吗? data2 具有相同的布局。它只是有更多种类的 WSO_ID,甚至更多的 WSO1_ID。对于更多上下文,它是一个水文系统值。
-
是的,这很好。我已经减少了您的示例数据,因此它们更易于理解和理解。我很惊讶/困惑
data2$PFAFSTETTE是用小数打印的——它们应该是整数吗?小数重要吗? -
我仍然对输出感到困惑。现在我们有了一个很好的小例子(可以随意剪切更多行!),你能给出预期的输出吗?比如
data2的第一行有一个1,而data1的行没有以1开头,所以我认为没有匹配。第二行,data2是 45。如果我们采用n = 1,我认为应该匹配data1中的46、47和48,因为 4 == 4 和 5 4463,因为5 < 463?还是因为5 > 4不匹配?如果有461,是因为5 < 6匹配,还是因为5 > 1不匹配? -
最后,为了澄清这个问题,
OBJECTID、WSO_ID, andSTRAHLER` 根本不重要,对吗?您提到的唯一列是PFAFFSTETTER和WSO1_ID。