我正在将一系列调查导入为 .csv 文件并组合成一个数据集。问题在于七个文件之一的某些变量的导入略有不同。数据集很大,我想找到一种方法来编写一个函数来运行给我带来麻烦的数据集。
在某些变量中,应该有点的时候却有下划线。并非所有变量都具有相同的格式,但不正确的变量是,因为下划线始终是列名的第六个元素。
我希望 R 查找第 6 个元素,如果它是下划线,则将其替换为点。下面是一个虚构的例子。
col_names <- c("s1.help_needed",
"s1.Q2_im_stuck",
"s1.Q2.im_stuck",
"s1.Q3.regex",
"s1.Q3_regex",
"s2.Q1.is_confusing",
"s2.Q2.answer_please",
"s2.Q2_answer_please",
"s2.someone_knows_the answer",
"s3.appreciate_the_help")
我认为这个问题有一个正则表达式的答案,但我正在努力寻找一个。也许还有一个 tidyr 答案?
正如 @thelatemail 指出的,您的数据实际上没有在第五个位置有下划线,但有些数据在第六个位置有下划线(其他数据有点)。基本 R 方法是使用gsub()
:
result <- gsub("^(.{5})_", "\\1.", col_names)
> result
[1] "s1.help_needed" "s1.Q2.im_stuck"
[3] "s1.Q2.im_stuck" "s1.Q3.regex"
[5] "s1.Q3.regex" "s2.Q1.is_confusing"
[7] "s2.Q2.answer_please" "s2.Q2.answer_please"
[9] "s2.someone_knows_the answer" "s3.appreciate_the_help"
这是正则表达式的解释:
^ from the start of the string
(.{5}) match AND capture any five characters
_ followed by an underscore
括号中的数量称为capture组并可以通过以下方式用于替换\\1
。因此,正则表达式表示将前六个字符替换为我们捕获的五个字符,但使用点作为第六个字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)