Answers:
您可以将其设置为NULL
。
> Data$genome <- NULL
> head(Data)
chr region
1 chr1 CDS
2 chr1 exon
3 chr1 CDS
4 chr1 exon
5 chr1 CDS
6 chr1 exon
正如评论中指出的那样,这里还有其他一些可能性:
Data[2] <- NULL # Wojciech Sobala
Data[[2]] <- NULL # same as above
Data <- Data[,-2] # Ian Fellows
Data <- Data[-2] # same as above
您可以通过以下方式删除多列:
Data[1:2] <- list(NULL) # Marek
Data[1:2] <- NULL # does not work!
不过,请谨慎使用矩阵子集,因为您可能会得到一个向量:
Data <- Data[,-(2:3)] # vector
Data <- Data[,-(2:3),drop=FALSE] # still a data.frame
Data[-2]
不需要drop
参数,因为它总是data.frame
从返回data.frame
。而且我认为这是将列(且仅列)本地化的一种更好的方法data.frame
(而且速度更快)。检查:(cars[-1]
一个col data.frame
)或更好cars[-(1:2)]
:data frame with 0 columns and 50 rows
。
Data[c(1,2)]<-list(NULL)
需要移除多个列时。
要按名称删除一个或多个列,当知道列名(而不是在运行时确定)时,我喜欢这种subset()
语法。例如,数据框
df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6)
删除仅a
您可以做的列
Data <- subset( Data, select = -a )
并删除您可以做的b
和d
列
Data <- subset( Data, select = -c(d, b ) )
您可以删除之间的所有列d
,并b
用:
Data <- subset( Data, select = -c( d : b )
就像我在上面说的那样,这种语法仅在列名已知时才有效。如果说以编程方式确定列名(即分配给变量),则它将不起作用。我将从?subset
文档中重现此警告:
警告:
这是旨在交互使用的便利功能。对于编程,最好使用“ [”之类的标准子集函数,尤其是对参数“子集”的非标准评估会产生意想不到的后果。
使用data.frame
s 时,发布的答案非常好。但是,从内存角度来看,这些任务的效率可能非常低。对于大数据,删除列可能会花费非常长的时间和/或由于out of memory
错误而失败。软件包data.table
可帮助:=
操作员解决此问题:
library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
b c
[1,] 1 1
我应该举一个更大的例子来说明差异。我将在某个时候更新此答案。
有几个选项可用于删除带有dplyr::select()
一个辅助功能的一个或多个列。帮助器功能很有用,因为某些功能不需要命名要删除的所有特定列。请注意,要使用删除列,select()
您需要使用前导-
符来否定列名。
将dplyr::starwars
样本数据用于某些列名称中:
library(dplyr)
starwars %>%
select(-height) %>% # a specific column name
select(-one_of('mass', 'films')) %>% # any columns named in one_of()
select(-(name:hair_color)) %>% # the range of columns from 'name' to 'hair_color'
select(-contains('color')) %>% # any column name that contains 'color'
select(-starts_with('bi')) %>% # any column name that starts with 'bi'
select(-ends_with('er')) %>% # any column name that ends with 'er'
select(-matches('^v.+s$')) %>% # any column name matching the regex pattern
select_if(~!is.list(.)) %>% # not by column name but by data type
head(2)
# A tibble: 2 x 2
homeworld species
<chr> <chr>
1 Tatooine Human
2 Tatooine Droid
您还可以按列号删除:
starwars %>%
select(-2, -(4:10)) # column 2 and columns 4 through 10
有了这个,您可以删除column
和存储variable
到另一个variable
。
df = subset(data, select = -c(genome) )