尝试删除 R 中的列,返回逻辑向量

Try to drop columns in R,returning logical vector

我有一个数据框,我需要在其中按列名删除某些列。列名是这样生成的

drops  <- sprintf("days.7.%d",1:7)

我的数据框是 df,我想删除生成的列,这是我尝试过的。

dfnew <- df[,(!names(df) %in% drops)]

它再次返回一个逻辑向量而不是数据帧。

我也试过这些方法,但每次都是returns相同的逻辑向量

  dropnames<- names(df) %in% drops
  dfnew <- df[!dropnames]

  dfnew <- df[ , -which(names(df) %in% drops)]

你可能 data.table。看这个例子

df <- mtcars[, 1:9]
names(df)[1:7] <- drops
df[,(!names(df) %in% drops)] #works

#                    vs am
#Mazda RX4            0  1
#Mazda RX4 Wag        0  1
#Datsun 710           1  1
#Hornet 4 Drive       1  0
#Hornet Sportabout    0  0
#...

现在将其转换为data.table

library(data.table)
setDT(df)

并尝试同样的事情

df[,(!names(df) %in% drops)] #you get
#[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE

您可以按名称对 data.table 进行子集化

df[, setdiff(names(df), drops), with = FALSE]

#    vs am
# 1:  0  1
# 2:  0  1
# 3:  1  1
# 4:  1  0
# 5:  0  0
# 6:  1  0
#...