I am confused about the output I am getting from a join command in dplyr like this:
d <- d1 %>% left_join(d2, by="someColumn")
The resulting df is what I expected except a column "someOtherColumn" is present as "someOtherColumn.x" and "someOtherColumn.y". I know that this is expected if the value in someColumn (on which I join) has diferent values in d1 and d2 but when I try to look at the rows affected with this:
d %>% filter( someOtherColumn.x != someOtherColumn.y)
I get no rows. How is that possible? Why might dplyr create the .x/.y columns for a column that has identical values in the two dataframes in the given join? It hasn't created .x/.y for any of the other columns.
Apologies for not showing any data. I can't share the actual data and I can't mock up a dataset that reproduces the error because I don't know what causes it.
Let's take this simple example.
library(dplyr)
set.seed(123)
df1 <- data.frame(a = 1:4, b = 1:4, c = rnorm(4))
df2 <- data.frame(a = 4:1, b = 4:1, c = rnorm(4))
df1
# a b c
#1 1 1 -0.56047565
#2 2 2 -0.23017749
#3 3 3 1.55870831
#4 4 4 0.07050839
df2
# a b c
#1 4 4 0.1292877
#2 3 3 1.7150650
#3 2 2 0.4609162
#4 1 1 -1.2650612
Notice the values in column a and b are the same in both the dataframes (although the order is different).
When you join only by a you get
df1 %>% left_join(df2, by = 'a')
# a b.x c.x b.y c.y
#1 1 1 -0.56047565 1 -1.2650612
#2 2 2 -0.23017749 2 0.4609162
#3 3 3 1.55870831 3 1.7150650
#4 4 4 0.07050839 4 0.1292877
You have told to join only by a so it will match only a column, rest of the columns are treated differently even if their values are the same. Hence you get b.x, b.y as well c.x and c.y.
If you want that b.x and b.y should not be generated as they are the same specify it in by.
df1 %>% left_join(df2, by = c('a', 'b'))
# a b c.x c.y
#1 1 1 -0.56047565 -1.2650612
#2 2 2 -0.23017749 0.4609162
#3 3 3 1.55870831 1.7150650
#4 4 4 0.07050839 0.1292877
Now you get only c.x and c.y additional columns.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With