Reputation: 556
I'm at a loss here. Loops are my weak spot.
I have two data frames and I'd like to add values conditionally to one of them.
This is how they look like:
df links
OID_ FROM_X FROM_Y NEAR_X NEAR_Y
0 0 2679218 1237147 2679968 1237580
1 0 2679218 1237147 2678468 1237580
2 0 2679218 1237147 2679218 1238013
3 0 2679218 1237147 2679968 1238446
4 0 2679218 1237147 2680718 1237147
5 0 2679218 1237147 2678468 1238446
and df centroid
FID_ GRID_ID x y ID
1 0 DD-122 2679218 1237147 1
2 1 DF-122 2680718 1237147 2
3 2 DG-122 2681468 1236714 3
4 3 DH-122 2682218 1237147 4
5 4 DI-122 2682968 1236714 5
6 5 DJ-122 2683718 1237147 6
So the idea is to add the ID
of the centroid
df to the links
df. Therefore, the following condition needs to be fulfilled for a row in links
:
links$FROM_X == centroid$x & links$FROM_Y == centroid$y
I'd be really happy if someone can help me with this. I really don't know how to start a loop like this.
Here is some data to try:
links
structure(list(OID_ = c("0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0"), FROM_X = c(2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115, 2679217.82115,
2679217.82115, 2679217.82115), FROM_Y = c(1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329, 1237146.74329,
1237146.74329, 1237146.74329, 1237146.74329), NEAR_X = c(2679967.8101,
2678467.83218, 2679217.82115, 2679967.8101, 2680717.79909, 2678467.83218,
2680717.79909, 2677717.84315, 2679217.82115, 2679967.8101, 2678467.83218,
2680717.79909, 2681467.78814, 2681467.78814, 2677717.84315, 2681467.78814,
2679217.82115, 2676967.85411, 2680717.79909, 2677717.84315, 2682217.77719,
2681467.78814, 2679967.8101, 2678467.83218, 2676967.85411, 2682217.77719,
2679217.82115, 2676217.86515, 2682217.77719, 2681467.78814, 2680717.79909,
2682967.76615, 2677717.84315, 2676967.85411, 2682967.76615, 2679967.8101,
2678467.83218, 2682967.76615, 2676217.86515, 2682217.77719, 2682967.76615,
2679217.82115, 2683717.75511, 2681467.78814, 2676967.85411, 2680717.79909,
2683717.75511, 2677717.84315, 2676217.86515, 2682217.77719, 2679967.8101,
2675467.87619, 2678467.83218, 2683717.75511, 2682967.76615, 2679217.82115,
2683717.75511, 2681467.78814, 2676967.85411, 2676217.86515, 2684467.74415,
2682217.77719, 2680717.79909, 2677717.84315, 2682967.76615, 2684467.74415,
2679967.8101, 2678467.83218, 2683717.75511, 2684467.74415, 2676217.86515,
2682217.77719, 2679217.82115, 2681467.78814, 2675467.87619, 2676967.85411,
2682967.76615, 2684467.74415, 2685217.73318, 2680717.79909, 2677717.84315,
2683717.75511, 2685217.73318, 2679967.8101, 2678467.83218, 2684467.74415,
2676217.86515, 2682217.77719, 2675467.87619, 2682967.76615, 2683717.75511,
2674717.88714, 2681467.78814, 2676967.85411, 2679217.82115, 2680717.79909,
2677717.84315, 2679967.8101, 2678467.83218, 2675467.87619), NEAR_Y = c(1237579.74961,
1237579.74961, 1238012.756, 1238445.7623, 1237146.74329, 1238445.7623,
1238012.756, 1238012.756, 1238878.7687, 1239311.775, 1239311.775,
1238878.7687, 1237579.74961, 1236713.7369, 1238878.7687, 1238445.7623,
1239744.78139, 1238445.7623, 1239744.78139, 1239744.78139, 1237146.74329,
1239311.775, 1240177.78772, 1240177.78772, 1239311.775, 1238012.756,
1240610.7941, 1238878.7687, 1238878.7687, 1240177.78772, 1240610.7941,
1237579.74961, 1240610.7941, 1240177.78772, 1236713.7369, 1241043.80042,
1241043.80042, 1238445.7623, 1239744.78139, 1239744.78139, 1239311.775,
1241476.80678, 1237146.74329, 1241043.80042, 1241043.80042, 1241476.80678,
1238012.756, 1241476.80678, 1240610.7941, 1240610.7941, 1241909.81311,
1240177.78772, 1241909.81311, 1238878.7687, 1240177.78772, 1242342.81941,
1239744.78139, 1241909.81311, 1241909.81311, 1241476.80678, 1237579.74961,
1241476.80678, 1242342.81941, 1242342.81941, 1241043.80042, 1238445.7623,
1242775.82579, 1242775.82579, 1240610.7941, 1239311.775, 1242342.81941,
1242342.81941, 1243208.83209, 1242775.82579, 1241909.81311, 1242775.82579,
1241909.81311, 1240177.78772, 1238012.756, 1243208.83209, 1243208.83209,
1241476.80678, 1238878.7687, 1243641.8385, 1243641.8385, 1241043.80042,
1243208.83209, 1243208.83209, 1242775.82579, 1242775.82579, 1242342.81941,
1242342.81941, 1243641.8385, 1243641.8385, 1244074.84491, 1244074.84491,
1244074.84491, 1244507.85121, 1244507.85121, 1243641.8385), Shape_Leng = c(866.012589959,
866.01267656, 866.012700003, 1499.977904, 1499.9779, 1499.977954,
1732.02531652, 1732.02540312, 1732.0254, 2291.25415704, 2291.25418977,
2291.25417332, 2291.25413408, 2291.25415298, 2291.25423878, 2598.03799308,
2598.0381, 2598.03816628, 2999.9559446, 2999.9559946, 2999.956,
3122.45309222, 3122.45312293, 3122.45314695, 3122.45323633, 3122.45320197,
3464.0508, 3464.05080623, 3464.05080624, 3774.86174659, 3774.86180482,
3774.86184633, 3774.86184456, 3774.8618658, 3774.8618578, 3968.56868289,
3968.56870179, 3968.56874268, 3968.56875598, 3968.56875599, 4330.0634828,
4330.0635, 4499.93390001, 4499.9338986, 4499.9339986, 4582.5084413,
4582.50838526, 4582.50847403, 4582.50847756, 4582.50847756, 4821.75458415,
4821.75462439, 4821.75459971, 4821.75456558, 4821.75462439, 5196.0761,
5196.07612276, 5267.74951671, 5267.74960213, 5267.74960642, 5267.74961078,
5267.74960643, 5408.24745528, 5408.24748301, 5408.2475483, 5408.24757832,
5678.82497899, 5678.82499219, 5678.82497084, 5678.82503411, 5999.9119026,
5999.9119026, 6062.0888, 6062.08881847, 6062.08886628, 6062.08889269,
6062.08886629, 6062.08888592, 6062.08891426, 6244.90626988, 6244.9062939,
6244.90632584, 6244.90640395, 6538.25244291, 6538.25245438, 6538.25248417,
6763.77532308, 6763.77532308, 6763.77537289, 6763.77537289, 6873.76257529,
6873.76270622, 6873.76263106, 6873.76269653, 6928.1016, 7088.61943403,
7088.61945519, 7399.2156926, 7399.21570273, 7499.8899432), ID = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA)), row.names = 0:99, class = "data.frame")
centroids
structure(list(FID_ = c("0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40",
"41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51",
"52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62",
"63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73",
"74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84",
"85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95",
"96", "97", "98", "99"), GRID_ID = c("DD-122", "DF-122", "DG-122",
"DH-122", "DI-122", "DJ-122", "DB-121", "DC-121", "DD-121", "DE-121",
"DF-121", "DG-121", "DH-121", "DI-121", "DJ-121", "DK-121", "DL-121",
"CZ-120", "DA-120", "DB-120", "DC-120", "DD-120", "DE-120", "DF-120",
"DG-120", "DH-120", "DI-120", "DJ-120", "DK-120", "DL-120", "CZ-119",
"DA-119", "DB-119", "DC-119", "DD-119", "DE-119", "DF-119", "DG-119",
"DH-119", "DI-119", "DJ-119", "DK-119", "DN-119", "DP-119", "CY-118",
"CZ-118", "DA-118", "DB-118", "DC-118", "DD-118", "DE-118", "DF-118",
"DG-118", "DH-118", "DI-118", "DJ-118", "DK-118", "DN-118", "DO-118",
"DP-118", "DQ-118", "DR-118", "DT-118", "CZ-117", "DA-117", "DB-117",
"DC-117", "DD-117", "DE-117", "DF-117", "DG-117", "DH-117", "DI-117",
"DJ-117", "DK-117", "DM-117", "DN-117", "DO-117", "DP-117", "DQ-117",
"DR-117", "DS-117", "DT-117", "DV-117", "CX-116", "CY-116", "CZ-116",
"DA-116", "DB-116", "DC-116", "DD-116", "DE-116", "DF-116", "DG-116",
"DH-116", "DI-116", "DJ-116", "DM-116", "DN-116", "DO-116"),
x = c(2679217.82115, 2680717.79909, 2681467.78814, 2682217.77719,
2682967.76615, 2683717.75511, 2677717.84315, 2678467.83218,
2679217.82115, 2679967.8101, 2680717.79909, 2681467.78814,
2682217.77719, 2682967.76615, 2683717.75511, 2684467.74415,
2685217.73318, 2676217.86515, 2676967.85411, 2677717.84315,
2678467.83218, 2679217.82115, 2679967.8101, 2680717.79909,
2681467.78814, 2682217.77719, 2682967.76615, 2683717.75511,
2684467.74415, 2685217.73318, 2676217.86515, 2676967.85411,
2677717.84315, 2678467.83218, 2679217.82115, 2679967.8101,
2680717.79909, 2681467.78814, 2682217.77719, 2682967.76615,
2683717.75511, 2684467.74415, 2686717.7111, 2688217.68914,
2675467.87619, 2676217.86515, 2676967.85411, 2677717.84315,
2678467.83218, 2679217.82115, 2679967.8101, 2680717.79909,
2681467.78814, 2682217.77719, 2682967.76615, 2683717.75511,
2684467.74415, 2686717.7111, 2687467.70009, 2688217.68914,
2688967.67814, 2689717.66711, 2691217.64515, 2676217.86515,
2676967.85411, 2677717.84315, 2678467.83218, 2679217.82115,
2679967.8101, 2680717.79909, 2681467.78814, 2682217.77719,
2682967.76615, 2683717.75511, 2684467.74415, 2685967.72215,
2686717.7111, 2687467.70009, 2688217.68914, 2688967.67814,
2689717.66711, 2690467.65611, 2691217.64515, 2692717.62315,
2674717.88714, 2675467.87619, 2676217.86515, 2676967.85411,
2677717.84315, 2678467.83218, 2679217.82115, 2679967.8101,
2680717.79909, 2681467.78814, 2682217.77719, 2682967.76615,
2683717.75511, 2685967.72215, 2686717.7111, 2687467.70009
), y = c(1237146.74329, 1237146.74329, 1236713.7369, 1237146.74329,
1236713.7369, 1237146.74329, 1238012.756, 1237579.74961,
1238012.756, 1237579.74961, 1238012.756, 1237579.74961, 1238012.756,
1237579.74961, 1238012.756, 1237579.74961, 1238012.756, 1238878.7687,
1238445.7623, 1238878.7687, 1238445.7623, 1238878.7687, 1238445.7623,
1238878.7687, 1238445.7623, 1238878.7687, 1238445.7623, 1238878.7687,
1238445.7623, 1238878.7687, 1239744.78139, 1239311.775, 1239744.78139,
1239311.775, 1239744.78139, 1239311.775, 1239744.78139, 1239311.775,
1239744.78139, 1239311.775, 1239744.78139, 1239311.775, 1239744.78139,
1239744.78139, 1240177.78772, 1240610.7941, 1240177.78772,
1240610.7941, 1240177.78772, 1240610.7941, 1240177.78772,
1240610.7941, 1240177.78772, 1240610.7941, 1240177.78772,
1240610.7941, 1240177.78772, 1240610.7941, 1240177.78772,
1240610.7941, 1240177.78772, 1240610.7941, 1240610.7941,
1241476.80678, 1241043.80042, 1241476.80678, 1241043.80042,
1241476.80678, 1241043.80042, 1241476.80678, 1241043.80042,
1241476.80678, 1241043.80042, 1241476.80678, 1241043.80042,
1241043.80042, 1241476.80678, 1241043.80042, 1241476.80678,
1241043.80042, 1241476.80678, 1241043.80042, 1241476.80678,
1241476.80678, 1242342.81941, 1241909.81311, 1242342.81941,
1241909.81311, 1242342.81941, 1241909.81311, 1242342.81941,
1241909.81311, 1242342.81941, 1241909.81311, 1242342.81941,
1241909.81311, 1242342.81941, 1241909.81311, 1242342.81941,
1241909.81311), coord_coun = c("1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1"), ID = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22",
"23", "24", "25", "26", "27", "28", "29", "30", "32", "33",
"34", "35", "36", "37", "38", "39", "40", "41", "42", "43",
"45", "46", "47", "48", "49", "50", "51", "52", "53", "54",
"55", "56", "57", "58", "59", "60", "61", "62", "63", "64",
"65", "66", "67", "68", "69", "70", "71", "72", "73", "74",
"75", "76", "77", "78", "79", "80", "81", "82", "83", "84",
"85", "86", "87", "88", "89", "90", "91", "92", "93", "94",
"95", "96", "97", "98", "99", "101", "102", "103"), ID1 = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22",
"23", "24", "25", "26", "27", "28", "29", "30", "32", "33",
"34", "35", "36", "37", "38", "39", "40", "41", "42", "43",
"45", "46", "47", "48", "49", "50", "51", "52", "53", "54",
"55", "56", "57", "58", "59", "60", "61", "62", "63", "64",
"65", "66", "67", "68", "69", "70", "71", "72", "73", "74",
"75", "76", "77", "78", "79", "80", "81", "82", "83", "84",
"85", "86", "87", "88", "89", "90", "91", "92", "93", "94",
"95", "96", "97", "98", "99", "101", "102", "103"), end22 = c("11",
"1", "0", "9", "4", "22", "0", "9", "7", "8", "0", "0", "21",
"120", "158", "16", "45", "53", "7", "3", "0", "9", "0",
"21", "0", "46", "182", "19", "120", "184", "39", "25", "2",
"3", "6", "7", "0", "25", "212", "57", "97", "205", "11",
"0", "0", "6", "0", "88", "8", "1", "4", "13", "56", "251",
"74", "110", "181", "213", "115", "41", "8", "0", "3", "3",
"16", "74", "55", "22", "9", "0", "168", "254", "225", "223",
"184", "68", "256", "94", "0", "0", "10", "10", "0", "5",
"4", "19", "0", "3", "87", "90", "88", "52", "27", "330",
"588", "121", "251", "128", "109", "98"), end44 = c("10",
"1", "0", "10", "4", "23", "0", "9", "7", "8", "0", "0",
"22", "120", "156", "16", "46", "54", "7", "3", "0", "9",
"0", "21", "0", "47", "184", "19", "121", "188", "40", "25",
"2", "3", "6", "7", "0", "26", "214", "58", "95", "208",
"12", "0", "0", "6", "0", "89", "8", "1", "4", "13", "57",
"254", "76", "109", "181", "215", "116", "42", "8", "0",
"3", "3", "16", "75", "56", "23", "9", "0", "170", "254",
"233", "226", "185", "70", "262", "96", "0", "0", "10", "10",
"0", "5", "4", "21", "0", "3", "87", "90", "91", "52", "27",
"332", "598", "119", "261", "129", "112", "100")), row.names = c(NA,
100L), class = "data.frame")
Upvotes: 0
Views: 30
Reputation: 30474
Maybe I'm missing something, but did you want to just "join" your two data frames?
You can indicate with columns you want to add to your links
data frame from centroids
(in this case, perhaps x
and y
to merge, and ID
).
If this is not what you had in mind please let me know.
library(dplyr)
left_join(links, centroids[,c("x", "y", "ID")], by = c("FROM_X" = "x", "FROM_Y" = "y"))
Or in base R:
merge(links, centroids[,c("x", "y", "ID")], by.x = c("FROM_X", "FROM_Y"), by.y = c("x", "y"))
Upvotes: 1