我正在尝试根据某些条件(在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))
答案 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