【问题标题】:Merge two dataframes based on common column names根据常用列名合并两个数据框
【发布时间】:2020-03-24 23:34:18
【问题描述】:

我有 2 个数据框:

df1(所有基因及其表达值——每列名称是一个基因)

df2(要分析的基因列表——每个基因都是一个列名,没有任何额外的数据)

基本上我想通过列名合并它们,获得第三个数据框 df1 但只有两个数据框上存在的基因(常见的列名)。

我不知道我是否解释得很好,但如果我能提供更多信息,请告诉我。

数据框示例:

df1 <- data.frame(matrix(ncol = 4, nrow = 0))
x1 <- c("name", "school", "job", "gender")
colnames(df1) <- x1

df2 <- data.frame(matrix(ncol = 3, nrow = 0))
x2 <- c("name", "age", "gender")
colnames(df2) <- x2

基本上,我想要的是 df1,但简化为 df1 和 df2 上的列,即“名称”和“性别”。但是在我的工作中,我有很多基因,所以我不能一个基因一个基因地去做。

谢谢!

【问题讨论】:

  • 你能展示一些示例数据吗
  • 我想我现在做到了。谢谢
  • 它显示了 0 行的 data.frame。你能试试merge(df1, df2),它会通过通用名称合并
  • df1 有 136 行(值),而 df2 有 0 行,因为它是一个转换为数据框的列表。如果我合并它会给我一个新的数据框,其中包含 0 行和 df1 上的每一列......我想要相反:df1 上的每一行,只有 df1 和 df2 之间的公共列(列名)。
  • 完美!非常感谢,如果我一开始没有正确解释,我很抱歉。

标签: r dataframe merge names


【解决方案1】:

我们可以在'df1'和'df2'的列名上使用intersect来选择'df1'的列

df1new <- df1[intersect(names(df1), names(df2))]

dplyr

library(dplyr)
df1new <- df1 %>%
            select(intersect(names(.), names(df2))

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 2023-01-13
    • 2022-01-20
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多