[英]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. 我试图基于某些条件(在year_col中)从数据中提取特定值。
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. 那就是提取id_row和id_col中每个ID的值以及year_row中每个年份的值,但是带有滞后的year_col。
I have looked into the group_by and filter without much luck. 我调查了group_by并进行了过滤,但运气不佳。
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))
you could use the dplyr
package: 您可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.