2017-01-23 146 views
0

我有一个包含313列,〜52000行信息​​的数据集。我需要删除每个包含单词“PERMISSIONS”的列。我试过grep和dplyr,但我似乎无法让它工作。删除包含特定单词的列

我读过的文件,

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

其他的例子演示了如何删除名字列,但我不知道如何处理通配符。不太确定该从哪里出发。

+0

你的意思是删除列,其中*列名*包括'PERMISSIONS'或其中*列数据*串的地方包括'PERMISSIONS'? – Gregor

+0

单词“PERMISSIONS”在列名中还是在列内的行中(即数据)? – JustGettinStarted

回答

1

试试这个,

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

编辑:改变脚本根据注释。

2

我们可以使用grepl!否定,

New.testSet <- testSet[!grepl("PERMISSIONS",row.names(testSet)), 
         !grepl("PERMISSIONS", colnames(testSet))] 
+1

他希望行中任何位置的“PERMISSIONS”列都被删除。 – Kristofersen

+0

@Kristofersen谢谢,更新了帖子 – akrun

+0

OP已经被问了两次,在评论中澄清了这一点。因为我觉得它的解释是开放的 – JustGettinStarted

2

从我能从这个问题明白了,OP有这样一个数据帧:

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

的目标是消除每列中有任何“PERMISSIONS”条目。假设有一个在“许可”没有变化,此代码应工作:

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

它看起来像这些答案只能做你想要什么部分。我认为这是你要找的。可能有更好的方法来写这个。

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 
1

如果您只想除去名为PERMISSIONS那么你可以使用select函数在dplyr包列。

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 
相关问题