我正在阅读一个具有冗余列名的文本文件。
file.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
我可以在过滤数据帧时使用正则表达式吗?
答案 0 :(得分:1)
我们可以使用grep
选择以names
或B
开头的E
列。默认情况下,data.frame
不允许复制列名称,并且在很多方面它实际上非常有用。
df1[grep("^(B|E)", names(df1))]
# B B.1 E E.1
#1 2 4 4 5
#2 4 5 6 8
但是,如果我们需要保留重复的列名,我们可以在check.names=FALSE
中使用read.table/read.csv
读取数据集,但我不建议这样做,因为它会造成很多混乱子集化。在不使用check.names
的情况下,read.table
会调用make.unique
来获取unique
列名称,即使列名称重复也是如此。
答案 1 :(得分:1)
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