Извлечение определенных значений из данных, основанных на наблюдениях столбцов - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь извлечь конкретные значения из данных, основанных на столбце с некоторыми условиями (в year_col).

Данные:

   id_row year_row id_col year_col      value
1     ID1     2000    ID1     2000 0.00000000
2     ID1     2001    ID1     2000 0.01265282
3     ID1     2002    ID1     2000 0.97564274
4     ID1     2003    ID1     2000 0.98024541
5     ID1     2004    ID1     2000 0.51856337
6     ID2     2000    ID1     2000 1.00000000
7     ID2     2001    ID1     2000 0.97501220
8     ID2     2002    ID1     2000 0.97273607
9     ID3     2000    ID1     2000 1.00000000
10    ID1     2000    ID1     2001 0.01265282
11    ID1     2001    ID1     2001 0.00000000
12    ID1     2002    ID1     2001 0.97198829
13    ID1     2003    ID1     2001 0.97728153
14    ID1     2004    ID1     2001 0.49576573
15    ID2     2000    ID1     2001 1.00000000
16    ID2     2001    ID1     2001 0.97126315
17    ID2     2002    ID1     2001 0.96864553
18    ID3     2000    ID1     2001 1.00000000
19    ID1     2000    ID1     2002 0.97564274
20    ID1     2001    ID1     2002 0.97198829

Ожидаемый результат:

   id_row year_row id_col year_col      value

1     ID1     2001    ID1     2000 0.01265282
2     ID1     2002    ID1     2001 0.97198829 
3     ID1     2003    ID1     2002 0.09580557
4     ID1     2004    ID1     2003 0.94777670
5     ID2     2001    ID2     2000 0.97501220
6     ID2     2002    ID2     2001 0.96864553

То есть извлекаются значения для каждого идентификатора в id_row и id_col и для каждого года в year_row, но с отставанием year_col.

Я посмотрел на group_by и отфильтровал без особой удачи.

Вот мои данные

df <- structure(list(id_row = c("ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID2", "ID2", "ID2", "ID3"), year_row = c("2000", "2001", "2002", 
"2003", "2004", "2000", "2001", "2002", "2000", "2000", "2001", 
"2002", "2003", "2004", "2000", "2001", "2002", "2000", "2000", 
"2001", "2002", "2003", "2004", "2000", "2001", "2002", "2000", 
"2000", "2001", "2002", "2003", "2004", "2000", "2001", "2002", 
"2000", "2000", "2001", "2002", "2003", "2004", "2000", "2001", 
"2002", "2000", "2000", "2001", "2002", "2003", "2004", "2000", 
"2001", "2002", "2000", "2000", "2001", "2002", "2003", "2004", 
"2000", "2001", "2002", "2000", "2000", "2001", "2002", "2003", 
"2004", "2000", "2001", "2002", "2000", "2000", "2001", "2002", 
"2003", "2004", "2000", "2001", "2002", "2000"), id_col = c("ID1", 
"ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", 
"ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID1", "ID2", 
"ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", 
"ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", 
"ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID2", "ID3", 
"ID3", "ID3", "ID3", "ID3", "ID3", "ID3", "ID3", "ID3"), year_col = c("2000", 
"2000", "2000", "2000", "2000", "2000", "2000", "2000", "2000", 
"2001", "2001", "2001", "2001", "2001", "2001", "2001", "2001", 
"2001", "2002", "2002", "2002", "2002", "2002", "2002", "2002", 
"2002", "2002", "2003", "2003", "2003", "2003", "2003", "2003", 
"2003", "2003", "2003", "2004", "2004", "2004", "2004", "2004", 
"2004", "2004", "2004", "2004", "2000", "2000", "2000", "2000", 
"2000", "2000", "2000", "2000", "2000", "2001", "2001", "2001", 
"2001", "2001", "2001", "2001", "2001", "2001", "2002", "2002", 
"2002", "2002", "2002", "2002", "2002", "2002", "2002", "2000", 
"2000", "2000", "2000", "2000", "2000", "2000", "2000", "2000"
), value = c(0, 0.0126528243223428, 0.975642738186892, 0.980245408067008, 
0.518563371872083, 1, 0.975012198097823, 0.97273607293636, 1, 
0.0126528243223428, 0, 0.971988294886507, 0.977281526630117, 
0.495765729632059, 1, 0.971263151675716, 0.968645527933215, 1, 
0.975642738186892, 0.971988294886507, 0, 0.0958055698205349, 
0.952303016080655, 0.771039058422751, 0.71926736774858, 0.875209312956793, 
0.761542337380287, 0.980245408067008, 0.977281526630117, 0.0958055698205349, 
0, 0.947776703213291, 0.758596060369833, 0.721719565905183, 0.875788199318376, 
0.742136651511878, 0.518563371872083, 0.495765729632059, 0.952303016080655, 
0.947776703213291, 0, 0.940736749815103, 0.937612053309506, 0.975975000994785, 
0.943889690922876, 1, 1, 0.771039058422751, 0.758596060369833, 
0.940736749815103, 0, 0.753367507803825, 0.820601259631019, 0.0572833227621783, 
0.975012198097823, 0.971263151675716, 0.71926736774858, 0.721719565905183, 
0.937612053309506, 0.753367507803825, 0, 0.903984128296163, 0.765562291938692, 
0.97273607293636, 0.968645527933215, 0.875209312956793, 0.875788199318376, 
0.975975000994785, 0.820601259631019, 0.903984128296163, 0, 0.844300211167695, 
1, 1, 0.761542337380287, 0.742136651511878, 0.943889690922876, 
0.0572833227621783, 0.765562291938692, 0.844300211167695, 0)), class = "data.frame", row.names = c(NA, 
-81L))

1 Ответ

3 голосов
/ 19 апреля 2019

вы можете использовать пакет dplyr:

library(dplyr)
df %>% 
  filter(id_row == id_col, as.numeric(year_row) == as.numeric(year_col) + 1)

    id_row year_row id_col year_col      value
1    ID1     2001    ID1     2000 0.01265282
2    ID1     2002    ID1     2001 0.97198829
3    ID1     2003    ID1     2002 0.09580557
4    ID1     2004    ID1     2003 0.94777670
5    ID2     2001    ID2     2000 0.75336751
6    ID2     2002    ID2     2001 0.90398413
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...