How to merge 3 data frames by rownames?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to merge 3 data frames by rownames?

anikaM
Hi,

I have 3 data frames like this:

> head(s11)
                      B_NoD
Ebfrl.7uOZfnjp_E7k 7.583709
ueQUrXd5FH554RlhZc 5.177791
0Uu3XrB6Bd14qoNeuc 4.680306
0t7nhVLii6tSAxtLhc 4.565023
fSUyR.vR7Xu0iR4nUU 2.885992
0Tm7hdRJxd9zoevPlA 2.866847
> head(s22)
                     B_DwoC
Ebfrl.7uOZfnjp_E7k 7.583709
ueQUrXd5FH554RlhZc 5.177791
0Uu3XrB6Bd14qoNeuc 4.680306
0t7nhVLii6tSAxtLhc 4.565023
fSUyR.vR7Xu0iR4nUU 2.885992
0Tm7hdRJxd9zoevPlA 2.866847
> head(s33)
                      B_DwC
Ebfrl.7uOZfnjp_E7k 7.583709
ueQUrXd5FH554RlhZc 5.177791
0Uu3XrB6Bd14qoNeuc 4.680306
0t7nhVLii6tSAxtLhc 4.565023
fSUyR.vR7Xu0iR4nUU 2.885992
0Tm7hdRJxd9zoevPlA 2.866847

I tried merging them using:

rn <- rownames(s11)
l <- list(s11, s22, s33)
allF <- l[[1]]
for(i in 2:length(l)) {
  dat <- merge(allF, l[[i]],  by= "row.names", all.x= F, all.y= F) [,-1]
  rownames(allF) <- rn
}

but my allF has only one column in results, while it would have all 3
from all 3 data frames:

> head(allF)
                      B_NoD
Ebfrl.7uOZfnjp_E7k 7.583709
ueQUrXd5FH554RlhZc 5.177791
0Uu3XrB6Bd14qoNeuc 4.680306
0t7nhVLii6tSAxtLhc 4.565023
fSUyR.vR7Xu0iR4nUU 2.885992
0Tm7hdRJxd9zoevPlA 2.866847

Please advise,
Ana

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: How to merge 3 data frames by rownames?

Eric Berger
I think your code is a bit buggy. Try this

for(i in 2:length(l)) {
  allF <- merge(allF, l[[i]],  by= "row.names", all.x= F, all.y= F)
  rownames(allF) <- allF$Row.names
  allF <- allF[,-1]
}

HTH,
Eric


On Tue, Nov 5, 2019 at 6:16 PM Ana Marija <[hidden email]>
wrote:

> Hi,
>
> I have 3 data frames like this:
>
> > head(s11)
>                       B_NoD
> Ebfrl.7uOZfnjp_E7k 7.583709
> ueQUrXd5FH554RlhZc 5.177791
> 0Uu3XrB6Bd14qoNeuc 4.680306
> 0t7nhVLii6tSAxtLhc 4.565023
> fSUyR.vR7Xu0iR4nUU 2.885992
> 0Tm7hdRJxd9zoevPlA 2.866847
> > head(s22)
>                      B_DwoC
> Ebfrl.7uOZfnjp_E7k 7.583709
> ueQUrXd5FH554RlhZc 5.177791
> 0Uu3XrB6Bd14qoNeuc 4.680306
> 0t7nhVLii6tSAxtLhc 4.565023
> fSUyR.vR7Xu0iR4nUU 2.885992
> 0Tm7hdRJxd9zoevPlA 2.866847
> > head(s33)
>                       B_DwC
> Ebfrl.7uOZfnjp_E7k 7.583709
> ueQUrXd5FH554RlhZc 5.177791
> 0Uu3XrB6Bd14qoNeuc 4.680306
> 0t7nhVLii6tSAxtLhc 4.565023
> fSUyR.vR7Xu0iR4nUU 2.885992
> 0Tm7hdRJxd9zoevPlA 2.866847
>
> I tried merging them using:
>
> rn <- rownames(s11)
> l <- list(s11, s22, s33)
> allF <- l[[1]]
> for(i in 2:length(l)) {
>   dat <- merge(allF, l[[i]],  by= "row.names", all.x= F, all.y= F) [,-1]
>   rownames(allF) <- rn
> }
>
> but my allF has only one column in results, while it would have all 3
> from all 3 data frames:
>
> > head(allF)
>                       B_NoD
> Ebfrl.7uOZfnjp_E7k 7.583709
> ueQUrXd5FH554RlhZc 5.177791
> 0Uu3XrB6Bd14qoNeuc 4.680306
> 0t7nhVLii6tSAxtLhc 4.565023
> fSUyR.vR7Xu0iR4nUU 2.885992
> 0Tm7hdRJxd9zoevPlA 2.866847
>
> Please advise,
> Ana
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.