I have two dataframes:
> head(df1)
UG S N_l N_b Girder1 Girder2 Girder3 Girder4 Girder5 Girder6 Girder7 Source
1 84 12 6 7 6 6 6 6 6 6 6 Code
2 124 9 4 7 4 4 4 4 3 3 3 Code
9 84 9 4 7 4 4 4 4 3 3 3 Code
24 124 12 6 7 6 6 6 6 6 6 6 Code
45 124 15 8 7 8 8 8 8 8 7 3 Code
49 84 15 8 7 8 8 8 8 8 7 3 Code
> head(df2)
UG S N_b N_l Girder1 Girder2 Girder3 Girder4 Girder5 Girder6 Girder7 Source
1 84 9 5 3 NA 2 3 3 3 2 NA CSi
2 84 12 5 4 NA 2 3 4 3 3 NA CSi
3 84 15 5 5 NA 3 3 5 3 3 NA CSi
4 92 9 5 3 NA 2 3 3 3 2 NA CSi
5 92 12 5 4 NA 2 3 4 3 3 NA CSi
6 92 15 5 5 NA 3 3 5 3 3 NA CSi
When I want to see the different between the two dataframes for columns that start with Girder.
lanes.difference <- df2[5:11]-df1[5:11]
This only goes in order of row numbers but that is not what I am trying to do.
I want to subtract the rows of df1 from df2 when the columns UG
, S
, N_l
, and N_b
are the same.
DATA:
> dput(df1)
structure(list(UG = c(84, 124, 84, 124, 124, 84, 84, 124, 116,
100, 108, 92, 84, 124, 116, 108, 100, 92, 124, 116, 108, 100,
92, 84), S = c(12, 9, 9, 12, 15, 15, 12, 9, 9, 9, 9, 9, 9, 12,
12, 12, 12, 12, 15, 15, 15, 15, 15, 15), N_l = c(6, 4, 4, 6,
8, 8, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5),
N_b = c(7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5), Girder1 = c(6, 4, 4, 6, 8, 8, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA), Girder2 = c(6, 4, 4, 6, 8, 8, 4, 3, 3, 3, 3, 3, 3, 4,
4, 4, 4, 4, 5, 5, 5, 5, 5, 5), Girder3 = c(6, 4, 4, 6, 8,
8, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5),
Girder4 = c(6, 4, 4, 6, 8, 8, 4, 3, 3, 3, 3, 3, 3, 4, 4,
4, 4, 4, 5, 5, 5, 5, 5, 5), Girder5 = c(6, 3, 3, 6, 8, 8,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), Girder6 = c(6,
3, 3, 6, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3), Girder7 = c(6, 3, 3, 6, 3, 3, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
Source = c("Code", "Code", "Code", "Code", "Code", "Code",
"Code", "Code", "Code", "Code", "Code", "Code", "Code", "Code",
"Code", "Code", "Code", "Code", "Code", "Code", "Code", "Code",
"Code", "Code")), row.names = c(1L, 2L, 9L, 24L, 45L, 49L,
67L, 68L, 69L, 73L, 74L, 75L, 83L, 134L, 135L, 137L, 138L, 139L,
199L, 200L, 204L, 205L, 206L, 211L), class = "data.frame")
> dput(df2)
structure(list(UG = c(84L, 84L, 84L, 92L, 92L, 92L, 100L, 100L,
100L, 108L, 108L, 108L, 116L, 116L, 116L, 124L, 124L, 124L, 84L,
84L, 84L, 124L, 124L, 124L), S = c(9L, 12L, 15L, 9L, 12L, 15L,
9L, 12L, 15L, 9L, 12L, 15L, 9L, 12L, 15L, 9L, 12L, 15L, 9L, 12L,
15L, 9L, 12L, 15L), N_b = c(5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 7L, 7L, 7L, 7L, 7L, 7L),
N_l = c(3L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 5L, 3L,
4L, 5L, 3L, 4L, 5L, 4L, 6L, 8L, 4L, 6L, 8L), Girder1 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 2L, 3L, 3L, 2L, 3L, 3L), Girder2 = c(2L, 2L, 3L,
2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L,
3L, 3L, 8L, 3L, 3L, 8L), Girder3 = c(3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 6L,
8L, 3L, 6L, 8L), Girder4 = c(3L, 4L, 5L, 3L, 4L, 5L, 3L,
4L, 5L, 3L, 4L, 5L, 3L, 4L, 5L, 3L, 4L, 5L, 4L, 6L, 8L, 3L,
6L, 8L), Girder5 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 6L, 8L, 3L, 6L, 8L
), Girder6 = c(2L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 3L,
3L, 2L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 7L, 3L, 3L, 8L), Girder7 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 3L, 3L, 3L, 3L, 3L, 3L), Source = c("CSi", "CSi",
"CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi",
"CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi", "CSi",
"CSi", "CSi", "CSi", "CSi")), row.names = c(NA, -24L), class = "data.frame")