在 R 中,可以根据名称模式轻松地从数据框中删除列:例如,请参阅如何在 R 中按名称模式删除列?和将数据子集化以仅包含名称与条件匹配的列。
> df <- data.frame(A=c(1,2,3), A2=c(1,2,3), B=c(1,2,3), BG=c(2,2,3))
> df[, -grep("A", colnames(df))]
B BG
1 1 2
2 2 2
3 3 3
但是直接将解决方案应用于 data.table 是行不通的。
> dt <- data.table(A=c(1,2,3), A2=c(1,2,3), B=c(1,2,3), BG=c(2,2,3))
> dt[, -grep("A", colnames(df))]
[1] -1 -2
可以做什么?
dt[, grep("A", names(dt)) := NULL]
有效。
> dt <- data.table(A=c(1,2,3), A2=c(1,2,3), B=c(1,2,3), BG=c(2,2,3))
> dt[, grep("A", names(dt)) := NULL]
> dt
B BG
1: 1 2
2: 2 2
3: 3 3
data.table::patterns
功能:
df <- data.table(A=c(1,2,3), A2=c(1,2,3), B=c(1,2,3), BG=c(2,2,3))
df[, .SD, .SDcols = !patterns("A")]