R:根据矢量值从数据帧中删除多个列

时间:2015-02-19 10:03:12

标签: r vector

我有一个数据框dataGL_all:

Date<-c("01-01-15 04:00","01-01-15 04:20","01-01-15 04:40")
FLIin<-c(96,39,72)
FLIout<-c(173,147,103)
FBEin<-c(96,116,166)
FBEout<-c(32,53,120)
dataGL_all<-data.frame(Date, FLIin, FLIout, FBEin, FBEout)

此外,我有一个矢量:

Remove <- c("FBEin", "FLIout")

我想用一段代码删除向量中的列从数据框中删除dataGL_all。我已经尝试了很多函数组合(例如grep(),c()和names())但是无法使它工作...会很感激帮助:) thx

P.S。我的“真实”数据框包含68列,我想删除36列(向量中的那些)。

2 个答案:

答案 0 :(得分:5)

dataGL_all[, !names(dataGL_all) %in% Remove]

应该做的伎俩。或者,如果您想要grep

dataGL_all[, grep(paste(Remove, collapse = "|"), names(dataGL_all), invert = T)]

答案 1 :(得分:4)

只是为了增加一些可能性,使用data.table包这些操作非常简单。您可以使用!with = FALSE组合临时删除列。或者,您可以在()环境中使用data.table评估此向量时使用引用来修改数据集,并使用NULL赋值运算符为其分配:=,所以这里:

加载包并转换为data.table

library(data.table)
setDT(dataGL_all)

然后要么

dataGL_all[, !Remove, with = FALSE]
#              Date FLIin FBEout
# 1: 01-01-15 04:00    96     32
# 2: 01-01-15 04:20    39     53
# 3: 01-01-15 04:40    72    120

或者通过参考

更新数据集
dataGL_all[, (Remove) := NULL][]
#              Date FLIin FBEout
# 1: 01-01-15 04:00    96     32
# 2: 01-01-15 04:20    39     53
# 3: 01-01-15 04:40    72    120