有人知道如何从R中的data。frame中移除一整列吗?例如,如果我得到这个data.frame:

> head(data)
   chr       genome region
1 chr1 hg19_refGene    CDS
2 chr1 hg19_refGene   exon
3 chr1 hg19_refGene    CDS
4 chr1 hg19_refGene   exon
5 chr1 hg19_refGene    CDS
6 chr1 hg19_refGene   exon

我想去掉第二列。


当前回答

这样你就可以删除列并将变量存储到另一个变量中。

df = subset(data, select = -c(genome) )

其他回答

使用dplyR,以下工作:

数据<- select(Data, -genome)

根据这里找到的文件https://www.marsja.se/how-to-remove-a-column-in-r-using-dplyr-by-name-and-index/#:~:text=select(starwars%2C%20%2Dheight)

这样你就可以删除列并将变量存储到另一个变量中。

df = subset(data, select = -c(genome) )

(为了完整性)如果你想按名称删除列,你可以这样做:

cols.dont.want <- "genome"
cols.dont.want <- c("genome", "region") # if you want to remove multiple columns

data <- data[, ! names(data) %in% cols.dont.want, drop = F]

包含drop = F可以确保结果仍然是data.frame,即使只剩下一列。

发布的答案在使用data.frames时非常好。然而,从内存的角度来看,这些任务的效率非常低。对于大数据,删除列可能需要异常长的时间和/或由于内存不足错误而失败。包数据。Table使用:=操作符帮助解决这个问题:

library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
     b c
[1,] 1 1

我应该用一个更大的例子来说明差异。我会在某个时候更新这个答案。

我只是想加上一个还没提到的。这很简单,但也很有趣,因为在我所有的互联网阅读中,我没有看到它,即使高度相关的%在%中出现在很多地方。

df <- df[ , -which(names(df) == 'removeCol')]

而且,我没有看到任何人发布grep替代品。这对于删除匹配模式的多个列非常方便。