【问题标题】:Remove columns based on row names根据行名删除列
【发布时间】:2020-04-08 09:58:18
【问题描述】:

我有 2 个数据框,我想删除 df1 中名称与 df2 中的行名称匹配的所有列。

df1

  GO_267 GO_345 GO_5 GO_2
a  0      1     1    1
b  0      1     1    1
c  0      1     1    1
d  0      1     1    1
e  0      1     1    1

df2

       z
GO_267 2
GO_345 3
GO_2   7


【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用which 进行子集化,使用第二个数据框中的行名列表作为要排除的列名的来源。

    df1[ , -which(names(df1) %in% row.names(df2)), drop=FALSE]
      GO_5
    1    1
    2    1
    3    1
    4    1
    5    1
    

    数据:

    df1 <- data.frame(GO_267=c(0,0,0,0,0), GO_345=c(1,1,1,1,1), GO_5=c(1,1,1,1,1),
                      GO_2=c(1,1,1,1,1))
    df2 <- data.frame(z=c(2,3,7))
    row.names(df2) <- c("GO_267", "GO_345", "GO_2")
    

    【讨论】:

      【解决方案2】:

      我们可以使用setdiff

      df1[setdiff(names(df1), rownames(df2))]
      
      #  GO_5
      #a    1
      #b    1
      #c    1
      #d    1
      #e    1
      

      【讨论】:

        【解决方案3】:

        我们可以使用select

        library(dplyr)
        df1 %>%
            select(-row.names(df2))
        

        数据

        df1 <- data.frame(GO_267=c(0,0,0,0,0), GO_345=c(1,1,1,1,1), GO_5=c(1,1,1,1,1),
                          GO_2=c(1,1,1,1,1))
        df2 <- data.frame(z=c(2,3,7))
        row.names(df2) <- c("GO_267", "GO_345", "GO_2")
        

        【讨论】:

          猜你喜欢
          • 2022-10-15
          • 1970-01-01
          • 2020-11-24
          • 2021-12-06
          • 1970-01-01
          • 2015-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多