删除包含特定单词的列
我有一个包含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