我有一个数据集,包含313列,大约52000行信息。我需要删除每一列中包含单词“PERMISSIONS”的内容。我尝试过使用grep和dplyr,但似乎无法使其正常工作。
我已经将文件读入程序中,
testSet <- read.csv("/Users/.../data.csv")
其他示例展示了如何按名称删除列,但我不知道如何处理通配符。不太确定接下来该怎么做。
我有一个数据集,包含313列,大约52000行信息。我需要删除每一列中包含单词“PERMISSIONS”的内容。我尝试过使用grep和dplyr,但似乎无法使其正常工作。
我已经将文件读入程序中,
testSet <- read.csv("/Users/.../data.csv")
其他示例展示了如何按名称删除列,但我不知道如何处理通配符。不太确定接下来该怎么做。
如果你只想删除名称为 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根据我所理解的问题,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)]
试一下这个:
New.testSet <- testSet[,!grepl("PERMISSIONS", colnames(testSet))]
编辑:根据评论更改了脚本。
!
否定的grepl
函数,New.testSet <- testSet[!grepl("PERMISSIONS",row.names(testSet)),
!grepl("PERMISSIONS", colnames(testSet))]
看起来这些答案只能部分满足你的需求。我认为这是你要找的东西。不过可能有更好的写法。
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