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) 了解更多信息。
来源:https://www.codenong.com/43669419/