user8959427
user8959427

Reputation: 2067

Extracting specific values from data based on column observations

I am trying to extract specific values from the data based on some conditions (in year_col) column.

Data:

   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

Expected Output:

   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

That is extract the values for each ID in id_row and id_col and for each year in year_row, but with the lagged year_col.

I have looked into the group_by and filter without much luck.

Here is my data

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))

Upvotes: 0

Views: 32

Answers (1)

Cettt
Cettt

Reputation: 11981

you could use the dplyr package:

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

Upvotes: 3

Related Questions