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

问题描述 投票:0回答:2

在 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

可以做什么?

r data.table
2个回答
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
    

0
投票
使用内置

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")]
    
© www.soinside.com 2019 - 2024. All rights reserved.