使用正则表达式通过名称访问数据框列

时间:2014-04-15 09:59:53

标签: regex r dataframe

我有一个巨大的data.frame [350000,431],我需要做一些清洁工作。 其中一项清理操作是将所有布尔列c(0,1)转换为c(FALSE, TRUE)。 我可以通过列名包含字符串" include"的条件来识别这些列。 所以我需要做那样的事情:

data.clean[,4:272] <-  ifelse(data.clean[,4:275] == 1,"TRUE", "FALSE")

而不是4:272(包含&#34的列的索引;包括&#34;,我想为此目的使用更强大的正则表达式。

1 个答案:

答案 0 :(得分:0)

模仿您的数据(只有三列,两列符合“包含”条件“):

data.clean <- data.frame(exclude = sample(LETTERS, 3.5e5, replace=TRUE), this.include = sample(c(0,1), 3.5e5, replace=TRUE), this.include2=sample(c(0,1), 3.5e5, replace=TRUE))

> head(data.clean)
  exclude this.include this.include2
1       W            1             1
2       Y            1             0
3       F            0             0
4       W            0             1
5       B            1             0
6       M            1             1

使用namesgrep标识正确的列,并使用直接逻辑比较将值返回到TRUEFALSE

data.clean[,names(data.clean)[grep("include", names(data.clean))]] <- data.clean[,names(data.clean)[grep("include", names(data.clean))]] == 1

> head(data.clean)
  exclude this.include this.include2
1       W         TRUE          TRUE
2       Y         TRUE         FALSE
3       F        FALSE         FALSE
4       W        FALSE          TRUE
5       B         TRUE         FALSE
6       M         TRUE          TRUE