要在data.frame中删除名为"foo"的专栏,我可以做:

df <- df[-grep('foo', colnames(df))]

然而,一旦df被转换为data.table对象,就没有办法只删除一列.

例子:

df <- data.frame(id = 1:100, foo = rnorm(100))
df2 <- df[-grep('foo', colnames(df))] # works
df3 <- data.table(df)
df3[-grep('foo', colnames(df3))] 

但一旦它被转换成data.table个对象,这就不再有效了.

推荐答案

以下任何一项都将从数据中删除第foo列.表df3:

# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]

df3[, c("foo","bar"):=NULL]  # remove two columns

myVar = "foo"
df3[, (myVar):=NULL]   # lookup myVar contents

# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]

# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]

data.table还支持以下语法:

## Method 3 (could then assign to df3, 
df3[, !"foo"]  

不过,如果你真的想从df3中删除第"foo"列(而不是只打印df3减go 第"foo"列的视图),你真的应该使用方法1.

(请注意,如果使用依赖于grep()grepl()的方法,如果不希望名称为"fool""buffoon"的列(即包含foo作为子字符串的列)也被匹配和删除,则需要设置pattern="^foo$"而不是"foo".)

不太安全的选项,适合交互式使用:

接下来的两个习惯用法也会起作用——if 100 contains a column matching 101——但如果不起作用,可能会以意想不到的方式失败.例如,如果使用其中任何一个来搜索不存在的列"bar",那么最终将得到一个零行数据.桌子

因此,它们最适合交互使用,例如,人们可能想要显示数据.表减go 名称中包含子字符串"foo"的所有列.出于编程目的(或者如果你想从df3中删除列,而不是从它的副本中删除列),方法1、2a和2b确实是最好的 Select .

# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]

最后还有使用with=FALSE的方法,尽管data.table正在逐渐远离使用这个论点,所以现在不鼓励你在可以避免的地方使用它;在此处显示,以便您知道该选项的存在,以防您确实需要它:

# Method 5a (like Method 3)
df3[, !"foo", with=FALSE] 
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]

R相关问答推荐

在' geom_contour_filled()'中对齐两个gplot的 colored颜色 比例

如何使用TukeyHSD绘制事后概率热图

创建重复删除的唯一数据集组合列表

基于shiny 应用程序中的日期范围子集xts索引

x[[1]]中的错误:脚注越界

在R中使用download. file().奇怪的URL?

将多列合并为单独的名称—值对

为了网络分析目的,将数据框转换为长格式列联表

找出二叉树中每个 node 在R中的深度?

根据列A中的差异变异列,其中行由列B中的相对值标识

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

根据现有列的名称和字符串的存在进行变异以创建多个新列

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

TreeNode打印 twig 并为其上色

将箭头绘制在图形外部,而不是图形内部

如何创建累加到现有列累计和的新列?

如何使用前缀作为匹配来连接数据帧?

基于R中的辅助向量中的值有条件地连接向量中的字符串

抽样变换-REXP与RWEIBUR

条形图中的条形图没有try 赋予它们的 colored颜色