Выбор конкретных цифр значений из двух наборов данных - PullRequest
1 голос
/ 23 октября 2019

Я относительно новичок в R. Я ищу способ выбрать конкретное значение pfaf из двух наборов данных точек с сайтов, основываясь на некоторых условиях. data2 является подмножеством data1. Но я включил только одно значение, которое соответствует.

data1:

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

Мне нужно получить серию (несколько) сайтов, которая соответствует серии чисел pfaf из data1. Эти числа pfaf должны следовать этим правилам.

1) Первые n цифр data2 $ pfaf точно соответствуют data1 $ pfaf, где n ≥ 0, AND

2) Остальные цифрыdata2 $ pfaf меньше и / или равен оставшимся цифрам data1 $ pfaf

В то же время id data2 $ pfaf и data1 $ pfaf должны быть одинаковыми для их сравнения привсе. И выпрямитель сайтов должен быть меньше или равен выпрямителю точек.

data2:

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 Ответ

0 голосов
/ 23 октября 2019

Может быть, что-то вроде следующей функции, что вы хотите? Не проверено, поскольку нет примера data2.

funMatch <- function(X, Y, n = 1){
  x <- as.character(X[['PFAFSTETTER']])
  x.n <- substr(x, 1, n)
  x.remaining <- substring(x, n + 1)
  y <- as.character(Y[['PFAFSTETTER']])
  y.n <- substr(y, 1, n)
  y.remaining <- substring(y, n + 1)
  i <- which(y.n %in% x.n & length(y.remaining) < length(x.remaining))
  Y[['WSO1_ID']][i]
}

funMatch(data1, data2, n = 1)
funMatch(data1, data2, n = 2)
...