проверить, находятся ли значения в ряду столбцов в пределах определенного числа от значений в другом ряду столбцов - PullRequest
1 голос
/ 09 июля 2019

У меня есть кадр данных в R, который выглядит следующим образом:

|---------------------------------------------------------|
| col1 | col2   | col3  | col4  | col5  | col6   | col7   |
|______|________|_______|_______|_______|________|________|
| x    | 2003   | 2004  | 2009  | 2002  | 2011   | NA     |
|------|--------|-------|-------|-------|--------|--------|
| y    | 2004   |  NA   | NA    | 2002  | 2004   | NA     |
|------|--------|-------|-------|-------|--------|--------|
| x    | 2007   |  2009 | NA    | 2010  | 2012   | 2013   |
|---------------------------------------------------------|

Я хочу проверить, сколько раз для каждой категории в col1 значения в col5: col7 встречаются в течение 2 или менее лет после (0-2) любое из значений в col2: col4.

поэтому желаемый результат будет выглядеть примерно так:

[[x]] 
2
[[y]]
1

или в виде такого кадра данных:

col1 | count |
______________
x    | 2
--------------
y    | 1

Я думаю, что должен быть способ dplyrсделай это?как что-то с gather() и filter()?или какой-то подход, использующий sapply, чтобы получить разницу между значениями, а затем просто посчитать число> 2?

Основная проблема, с которой я сталкиваюсь, заключается в том, как синтаксис, когда не все столбцы имеют значения для каждогои я хочу сравнить значения в col2: col4 со всеми значениями в col5: col7, а не только с конкретным столбцом.

1 Ответ

0 голосов
/ 09 июля 2019

Хорошо, спасибо @NelsonGon, это работает, но я думаю, что, возможно, есть более простой подход:

#convert to long format
test <- mydf %>%
  gather( first_group, year.1, col2:col4) %>%
  gather(scond_group, year.2, col5:col7) 

#remove the NA values
test <- test[-c(which(is.na(test$year.2))),]
test <- test[-c(which(is.na(test$year.1))),]

#count number fitting criteria
test2 <- test %>%
  group_by(col1) %>%
  filter(year.2 >= year.1 & year.2 <= year.1 + 2) %>%
  summarise(n = n()) 

##result
#test1
## A tibble: 2 x 2
#depend_var     n
#<chr>      <int>
#1 x         2
#2 y         1
...