R标识字符串,结尾包含破折号(-)和多位数字

wlzqhblo  于 2023-05-20  发布在  其他
关注(0)|答案(2)|浏览(142)

我有一个类似于以下的数据集:

identifier           number
cat-123              5
green-489743         25
orange-fish5         77
red-blue123          90
dog-23               34
orange5              17
reptile              9
purple-2             11

我需要创建一个新的列“identifier_edited”,其中包含identifier,但不包含任何以破折号开头以数字结尾的结尾。这是我需要的数据看起来像这样的变化:

identifier           number   identifier_edited
cat-123              5        cat
green-489743         25       green
orange-fish5         77       orange-fish5
red-blue123          90       red-blue123
dog-23               34       dog
orange5              17       orange5
reptile              9        reptile
purple-2             11       purple

请注意,如果结尾不是带数字的破折号(多位数或个位数),则会保留相同的字符串。
我知道如何识别一个以数字结尾的字符串,甚至一个以单破折号和一个数字结尾的字符串,但我不知道如何识别一个以破折号结尾的字符串沿着一个个位数或多位数。

fslejnso

fslejnso1#

尝试sub模式"-\\d+$"

> setDT(df)[, identifier_edited := sub("-\\d+$", "", identifier)][]
     identifier number identifier_edited
1:      cat-123      5               cat
2: green-489743     25             green
3: orange-fish5     77      orange-fish5
4:  red-blue123     90       red-blue123
5:       dog-23     34               dog
6:      orange5     17           orange5
7:      reptile      9           reptile
8:     purple-2     11            purple

数据

> dput(df)
structure(list(identifier = c("cat-123", "green-489743", "orange-fish5",
"red-blue123", "dog-23", "orange5", "reptile", "purple-2"), number = c(5L,
25L, 77L, 90L, 34L, 17L, 9L, 11L)), class = "data.frame", row.names = c(NA,
-8L))
xesrikrc

xesrikrc2#

要识别以破折号结尾的字符串,后跟一个或多个数字,可以使用Regex。

import pandas as pd
import re

data = {
    'identifier': ['cat-123','example-2 , 'example-3'],
    'number': [5,25,77,1,2,3]
}
df = pd.DataFrame(data)

# Define a regular expression pattern
pattern = r'-\d+$'

# Function to extract the edited identifier
def extract_identifier(identifier):
    if re.search(pattern, identifier):
        return re.sub(pattern, '', identifier)
    return identifier

# Apply the function to create the new column
df['identifier_edited'] = df['identifier'].apply(extract_identifier)

# Display the resulting DataFrame
print(df)

相关问题