gpt4 book ai didi

r - Tidyr使用正则表达式将列值分为字符和数字

转载 作者:行者123 更新时间:2023-12-04 17:15:59 29 4
gpt4 key购买 nike

我想使用tidyr::separate和regex表达式来分隔列值,但对于regex表达式来说是新手

df <- data.frame(A=c("enc0","enc10","enc25","enc100","harab0","harab25","harab100","requi0","requi25","requi100"), stringsAsFactors=F) 

这就是我尝试过的
library(tidyr)
df %>%
separate(A, c("name","value"), sep="[a-z]+")

输出不良
   name value
1 0
2 10
3 25
4 100
5 0
# etc

我如何也保存 name列?

最佳答案

您可以将基于(?<=[a-z])(?=[0-9])环视的正则表达式与tidyr::separate一起使用:

> tidyr::separate(df, A, into = c("name", "value"), "(?<=[a-z])(?=[0-9])")
name value
1 enc 0
2 enc 10
3 enc 25
4 enc 100
5 harab 0
6 harab 25
7 harab 100
8 requi 0
9 requi 25
10 requi 100
(?<=[a-z])(?=[0-9])模式与字符串中的小写ASCII字母( (?<=[a-z]))和数字( (?=[0-9]))之间的位置匹配。 (?<=...)是正向前行,需要在当前位置的左侧立即存在某种模式,而 (?=...)是正向前行,需要在当前位置的右侧立即存在其模式。因此,拆分时字母和数字保持完整。

或者,您可以使用 extract:
extract(df, A, into = c("name", "value"), "^([a-z]+)(\\d+)$")

输出:
    name value
1 enc 0
2 enc 10
3 enc 25
4 enc 100
5 harab 0
6 harab 25
7 harab 100
8 requi 0
9 requi 25
10 requi 100
^([a-z]+)(\\d+)$模式匹配:
  • ^-输入
  • 的开始
  • ([a-z]+)-捕获组1(列name):一个或多个小写ASCII字母
  • (\\d+)-捕获组2(列value):一个或多个数字
  • $-字符串结尾。
  • 关于r - Tidyr使用正则表达式将列值分为字符和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591387/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com