关于正则表达式:基于单个单元格内的 % 符号排序 – R

Sorting based on % symbol within a single cell - R

我有一个 data.frame 包含这样的单元格:

1
df<-as.data.frame(c('10% - 34', '15.5% - 15:4', '18% - 1n9'))

我想在每个单元格内 sort 使百分比值在右侧,变为:

34 - 10%15:4 - 15.5%1n9 - 18%

我已经尝试通过 '-' 分隔符将每个分隔符拆分并重新粘贴在一起,但是对于较大的 data.frame 是否有更有效的方法?谢谢


我们反转元素的正则表达式可能比拆分和重新粘贴更有效。

1
2
sub("(.+%) - (.*)","\\\\2 - \\\\1", df[[1]])
# [1]"34 - 10%"    "15:4 - 15.5%""1n9 - 18%"

这里我们捕获 pattern 参数中的第一个和最后一个元素,然后在 replacement 参数中交换它们。

正则表达式解释由 regex101.com 提供:

  • (.+%) 是第一个捕获组; .+ 匹配任何字符(行终止符除外); + 是一个量词。它匹配一次到无限次,尽可能多次,按需回馈(贪婪); % 从字面上匹配字符 %(区分大小写); - 与字符 - 字面匹配(区分大小写)
  • (.*) 是第二个捕获组; .* 匹配任何字符(行终止符除外); * 是一个量词。它在零次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)

替换字符串"\\\\2 - \\\\1"首先放置第二个捕获组(\\\\2),然后是文字-,然后是第一个捕获组(\\\\1)。请参阅 help(regex) 了解更多信息。