删除包含特定单词的列。

4

我有一个数据集,包含313列,大约52000行信息。我需要删除每一列中包含单词“PERMISSIONS”的内容。我尝试过使用grep和dplyr,但似乎无法使其正常工作。

我已经将文件读入程序中,

testSet <- read.csv("/Users/.../data.csv")

其他示例展示了如何按名称删除列,但我不知道如何处理通配符。不太确定接下来该怎么做。


2
您的意思是删除包含“PERMISSIONS”的列名,还是包含“PERMISSIONS”字符串的列数据? - Gregor Thomas
“PERMISSIONS” 这个词是在列名中还是在列中的行中(即数据)? - JustGettinStarted
5个回答

14

如果你只想删除名称为 PERMISSIONS 的列,那么你可以使用 dplyr 包中的 select 函数。

df <- data.frame("PERMISSIONS" = c(1,2), "Col2" = c(1,4), "Col3" = c(1,2))

PERMISSIONS Col2 Col3
1    1    1
2    4    2

df_sub <- select(df, -contains("PERMISSIONS"))

Col2 Col3
1    1
4    2

我遇到了这个错误:Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘select’ for signature ‘"data.frame"’,但不知道原因。有什么建议吗? - Ben
如果我需要排除多个字符怎么办? - ah bon

6

根据我所理解的问题,OP有一个类似这样的数据框:

df <- read.table(text = '
           a b c d
           e f PERMISSIONS g
           h i j k
           PERMISSIONS l m n',
                 stringsAsFactors = F)

目标是删除所有包含“PERMISSIONS”条目的列。假设在“PERMISSIONS”方面没有变化,以下代码应该有效:

cols <- colSums(mapply('==', 'PERMISSIONS', df))
new.df <- df[,which(cols == 0)]

5

试一下这个:

New.testSet <- testSet[,!grepl("PERMISSIONS", colnames(testSet))]

编辑:根据评论更改了脚本。


3
我们可以使用带有!否定的grepl函数,
New.testSet <- testSet[!grepl("PERMISSIONS",row.names(testSet)),
                         !grepl("PERMISSIONS", colnames(testSet))]

1
他想删除在行中任何位置都包含“PERMISSIONS”的列。 - Kristofersen
OP已经被要求在评论中澄清两次。我感觉它现在还存在解释的余地。 - JustGettinStarted

2

看起来这些答案只能部分满足你的需求。我认为这是你要找的东西。不过可能有更好的写法。

library(data.table)
df = data.frame("PERMISSIONS" = c(1,2), "Col2" = c("PERMISSIONS","A"), "Col3" = c(1,2))

  PERMISSIONS        Col2 Col3
1           1 PERMISSIONS    1
2           2           A    2

df = df[,!grepl("PERMISSIONS",colnames(df))]
setDT(df)
ind = df[, lapply(.SD, function(x) grepl("PERMISSIONS", x, perl=TRUE))] 
df[,which(colSums(ind) == 0), with = FALSE]

   Col3
1:    1
2:    2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接