首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按公共列合并dfs导入R中的选定列

按公共列合并dfs导入R中的选定列
EN

Stack Overflow用户
提问于 2020-11-26 19:17:47
回答 1查看 35关注 0票数 2

我想通过常见的"names“列合并data.frames,但只选择"PA”列。

代码语言:javascript
运行
复制
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))

目前,这是导入所有列,但我只想选择导入"PA“。

代码语言:javascript
运行
复制
library(dplyr)

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

Curref dff:

代码语言:javascript
运行
复制
  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

所需:

代码语言:javascript
运行
复制
  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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 19:22:18

使用类似于joins的SQL,可以做到这一点:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65021022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档