2017-01-23 222 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