按名称模式删除 data.table 中的列

wwl*_*wwl 6 r data.table

在 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
Run Code Online (Sandbox Code Playgroud)

但直接将解决方案应用于 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
Run Code Online (Sandbox Code Playgroud)

可以做什么?

wwl*_*wwl 5

正如里奇·斯克里文(Rich Scriven)指出的那样,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
Run Code Online (Sandbox Code Playgroud)