我有一个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"
这应该选择前两列,而不是第三列。似乎\w
无法识别matches
。还有其他办法吗?
答案 0 :(得分:6)
您可以使用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