【问题标题】:How to filter dataframe with same column name?如何过滤具有相同列名的数据框?
【发布时间】:2016-05-17 13:12:11
【问题描述】:

我正在阅读一个包含冗余列名的文本文件。

文件.txt

A  B  B  E  E
2  2  4  4  5
3  4  5  6  8

我想保留以 B 和 E 作为列名的列。但是当我阅读文件时

rt<-read.table("file.txt",header=TRUE)

  A B B.1 E E.1
  1 2 4   4 5
  2 4 5   6 8

我可以在过滤数据帧时使用正则表达式吗?

【问题讨论】:

    标签: r filter


    【解决方案1】:

    我们可以使用grep 来选择以BE 开头的names 列。默认情况下,data.frame 不允许重复列名,实际上它在很多方面都非常有用。

     df1[grep("^(B|E)", names(df1))]
     #  B B.1 E E.1
     #1 2   4 4   5
     #2 4   5 6   8
    

    但是,如果我们需要保留重复的列名,我们可以在 read.table/read.csv 中读取带有 check.names=FALSE 的数据集,但我不建议这样做,因为它会在子集化时造成很多混乱。不使用check.names,即使有重复的列名,read.table 也会调用make.unique 来获取unique 列名。

    【讨论】:

      【解决方案2】:
      Another way of coding for the same   
       rt[!grepl("^A",colnames(rt))]
            B B.1 E E.1
            2   4 4   5
            4   5 6   8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        相关资源
        最近更新 更多