使用dplyr和正则表达式将列转换为数据框中的因子

vik*_*r_r 1 regex r dplyr

我有一个data.frame> 100列,在导入它们之后都被格式化为数字.我想将特定列从数字转换为因子.我不想手动转换每一列,而是使用正则表达式为列名选择相关列并对其进行转换.在regexr.com的帮助下,我创建了以下表达式:\b\w{2,4}[1-9]\b.它应该选择列名称为2到4个字母的单词的所有列,以1到9的数字结尾.

这是一个例子:

df<-data.frame(pre1=c(1:10), 
               em2=c(1:10), 
               foo=c(1:10))
df
   pre1 em2 foo
1     1   1   1
2     2   2   2
3     3   3   3
4     4   4   4
5     5   5   5
6     6   6   6
7     7   7   7
8     8   8   8
9     9   9   9
10   10  10  10

df %>%
select(matches("/\b\w{2,4]}[1-9]\b/"))
Error: '\w' is an unrecognized escape in character string starting ""/\b\w"
Run Code Online (Sandbox Code Playgroud)

这应该选择前两列,而不是第三列.似乎\w没有得到承认matches.还有其他办法吗?

Jul*_*lge 7

你可以很好地完成这一切dplyr::mutate_at(),定义你想要改变的变量vars().

library(dplyr)

df <- data_frame(pre1=c(1:10), 
                 em2=c(1:10), 
                 foo=c(1:10))

df %>%
  mutate_at(vars(matches("\\b\\w{2,4}[1-9]\\b")), as.factor)

#> # A tibble: 10 x 3
#>      pre1    em2   foo
#>    <fctr> <fctr> <int>
#>  1      1      1     1
#>  2      2      2     2
#>  3      3      3     3
#>  4      4      4     4
#>  5      5      5     5
#>  6      6      6     6
#>  7      7      7     7
#>  8      8      8     8
#>  9      9      9     9
#> 10     10     10    10
Run Code Online (Sandbox Code Playgroud)