删除包含特定字

时间:2017-01-23 20:30:28

标签: r grep

我的数据集有313列,约52000行信息​​。我需要删除包含单词" PERMISSIONS"的每一列。我尝试过grep和dplyr,但我似乎无法让它发挥作用。

我已经阅读了该文件,

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

其他示例显示如何按名称删除列,但我不知道如何处理通配符。不太清楚从哪里开始。

5 个答案:

答案 0 :(得分:6)

如果您只想删除名为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

答案 1 :(得分:4)

试试这个,

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

编辑:根据评论更改了脚本。

答案 2 :(得分:4)

从我可以理解的问题来看,OP有一个这样的数据框:

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

目标是删除任何具有任何“允许”的列。条目。假设“PERMISSIONS&#39;”中没有可变性,则此代码应该有效:

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

答案 3 :(得分:3)

我们可以app.component('myComponent', { template: '<input ng-model="$ctrl.data" type="text">', bindings: { 'data': '<' }, controller: function() { this.originalData = angular.copy(this.data); this.uiCanExit = function() { if (!angular.equals(this.data, this.originalData) { // Note: This could also return a Promise and request async // confirmation using something like ui-bootstrap $modal return window.confirm("Data has changed. Exit anyway and lose changes?"); } } } 使用grepl否定,

!

答案 4 :(得分: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