我有一個包含313列,〜52000行信息的數據集。我需要刪除每個包含單詞「PERMISSIONS」的列。我試過grep和dplyr,但我似乎無法讓它工作。刪除包含特定單詞的列
我讀過的文件,
testSet <- read.csv("/Users/.../data.csv")
其他的例子演示瞭如何刪除名字列,但我不知道如何處理通配符。不太確定該從哪裏出發。
我有一個包含313列,〜52000行信息的數據集。我需要刪除每個包含單詞「PERMISSIONS」的列。我試過grep和dplyr,但我似乎無法讓它工作。刪除包含特定單詞的列
我讀過的文件,
testSet <- read.csv("/Users/.../data.csv")
其他的例子演示瞭如何刪除名字列,但我不知道如何處理通配符。不太確定該從哪裏出發。
試試這個,
New.testSet <- testSet[,!grepl("PERMISSIONS", colnames(testSet))]
編輯:改變腳本根據註釋。
我們可以使用grepl
與!
否定,
New.testSet <- testSet[!grepl("PERMISSIONS",row.names(testSet)),
!grepl("PERMISSIONS", colnames(testSet))]
他希望行中任何位置的「PERMISSIONS」列都被刪除。 – Kristofersen
@Kristofersen謝謝,更新了帖子 – akrun
OP已經被問了兩次,在評論中澄清了這一點。因爲我覺得它的解釋是開放的 – JustGettinStarted
從我能從這個問題明白了,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)]
它看起來像這些答案只能做你想要什麼部分。我認爲這是你要找的。可能有更好的方法來寫這個。
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
如果您只想除去名爲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
你的意思是刪除列,其中*列名*包括'PERMISSIONS'或其中*列數據*串的地方包括'PERMISSIONS'? – Gregor
單詞「PERMISSIONS」在列名中還是在列內的行中(即數據)? – JustGettinStarted