2 votes

Combiner les dfs par colonne commune en important les colonnes sélectionnées dans R

Je voudrais fusionner data.frames par la colonne "noms" commune mais en sélectionnant uniquement les colonnes "PA".

df <- data.frame(names=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), `S1`=c(1,2,2,0,1), `S2`=c(2,50,40,30,22), `S3`=c( 0,100,135,256,303), `S4`=c(0,10,17,73,74),check.names=FALSE)
df2<- data.frame(names=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), AB=c(0,30,30,40,2), PA=c(2,4,5,6,7))
df3<- data.frame(names=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), AB=c(100,300,300,400,200), PA=c(3,5,7,8,7))
df4<- data.frame(names=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), AB=c(110,310,310,410,210), PA=c(30,50,70,80,70))

Pour l'instant, toutes les colonnes sont importées, mais je voudrais sélectionner uniquement l'importation des "PA".

library(dplyr)

dff<- list(df,df2,df3, df4) %>%
        Reduce(function(df,df2) left_join(df,df2,by="names"), .)

Curref dff :

  names S1   S2  S3   S4   AB.x PA.x  AB.y  PA.y AB  PA 
1 Obs1  1    2   0    0    0    2     100   3    110 30
2 Obs2  2    50  100  10   30   4     300   5    310 50 
3 Obs3  2    40  135  17   30   5     300   7    310 70 
4 Obs4  0    30  256  73   40   6     400   8    410 80 
5 Obs5  1    22  303  74   2    7     200   7    210 70

Désiré :

  names S1   S2  S3   S4    PA_df2   PA_df3 PA_df4 
1 Obs1  1    2   0    0     2        3      30
2 Obs2  2    50  100  10    4        5      50 
3 Obs3  2    40  135  17    5        7      70 
4 Obs4  0    30  256  73    6        8      80 
5 Obs5  1    22  303  74    7         7     70

1voto

Karthik S Points 7623

En utilisant le SQL comme les jointures, cela fonctionne-t-il :

library(dplyr)
df %>% inner_join(df2 %>% select(names, 'PA_df2' = PA)) %>% 
          inner_join(df3 %>% select(names, 'PA_df3' = PA)) %>% 
          inner_join(df4 %>% select(names, 'PA_df4' = PA))
Joining, by = "names"
Joining, by = "names"
Joining, by = "names"
  names S1 S2  S3 S4 PA_df2 PA_df3 PA_df4
1  Obs1  1  2   0  0      2      3     30
2  Obs2  2 50 100 10      4      5     50
3  Obs3  2 40 135 17      5      7     70
4  Obs4  0 30 256 73      6      8     80
5  Obs5  1 22 303 74      7      7     70

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X