Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems merging data frames in R [duplicate]

Tags:

merge

r

I have two data frames:

x <- data.frame("coi" = c(0,1,NA,1),"v2" = c(7,8,9,NA))
y <- data.frame("c1" = c(0,-1,1), "c2" = c(0,-1,-1), "coi" = c(0,1,NA))
> x
  coi v2
1   0  7
2   1  8
3  NA  9
4   1 NA
> y
  c1 c2 coi
1  0  0   0
2 -1 -1   1
3  1 -1  NA

And I want to merge them into something like this:

> obj
  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1

but when i try

merge(x,y)

I'm getting this:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3   1 NA -1 -1
4  NA  9  1 -1

which is not bad, but is there anyway to preserve the original order in column "coi"?

like image 790
PeterTschuschke Avatar asked May 13 '20 14:05

PeterTschuschke


People also ask

How do you handle duplicate data in R?

There are other methods to drop duplicate rows in R one method is duplicated() which identifies and removes duplicate in R. The other method is unique() which identifies the unique values. Get distinct Rows of the dataframe in R using distinct() function.

How do I combine multiple data frames into one in R?

To join two data frames (datasets) vertically, use the rbind function. The two data frames must have the same variables, but they do not have to be in the same order. If data frameA has variables that data frameB does not, then either: Delete the extra variables in data frameA or.

How do I merge two data frames in the same column in R?

The merge() function in base R can be used to merge input dataframes by common columns or row names. The merge() function retains all the row names of the dataframes, behaving similarly to the inner join. The dataframes are combined in order of the appearance in the input function call.

How to merge data frames in R?

Merging of Data frames in R can be done in two ways. In this way, we merge the database horizontally. We use the merge function to merge two frames by one or more common key variables (i.e., an inner join). In this way, we merge the data frames vertically and use the rbind () function. rbind stands for row binding.

How to join two data frames in R using dplyr?

Right join using right_join () function of dplyr or merge () function. semi join and anti join in R using semi_join () function and anti_join () function. x: data frame1. y: data frame2. by,x, by.y: The names of the columns that are common to both x and y. The default is to use the columns with common names between the two data frames.

How to perform joins in R Dataframe?

In this article, we will discuss how to perform inner, outer, left, or right joins in a given dataframe in R Programming Language. merge () function is used to merge or join two tables. With appropriate values provided to specific parameters, we can create the desired join. Syntax: merge (df1, df2, by.df1, by.df2, all.df1, all.df2, sort = TRUE)

What are the different arguments of merge () function in R?

The different arguments to merge () allow you to perform natural joins i.e. inner join, left join, right join,cross join, semi join, anti join and full outer join. We can perform Join in R using merge () Function or by using family of join () functions in dplyr package.


Video Answer


2 Answers

you can use something like:

library(dplyr)
left_join(x, y, by = "coi")

you will get:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1
like image 90
Harshal Gajare Avatar answered Oct 22 '22 23:10

Harshal Gajare


In this case (match only one) you can use cbind in combination with match like:

cbind(x, y[match(x$coi, y$coi),-3])
#    coi v2 c1 c2
#1     0  7  0  0
#2     1  8 -1 -1
#3    NA  9  1 -1
#2.1   1 NA -1 -1
like image 4
GKi Avatar answered Oct 23 '22 01:10

GKi