根据列观察值从数据中提取特定值

时间:2019-04-19 12:45:03

标签: r dataframe dplyr

我正在尝试根据某些条件(在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中每个ID的值以及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 个答案:

答案 0 :(得分:3)

您可以使用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