我有以下数据 -
PLAYSTORE BANGKOK
FLOAT@THE BAY SINGAPORE
YANTRA SINGAPORE
AIRASIA_QS9DQQL SINGAPORE
我想删除每个字符串中的最后一个单词,如果它在我正在寻找的城市列表中使用 -
sub('(?i)^(.*)\\b(singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$','\\2', merch_desc$desc2 )
但\ 1或\ 2不起作用,我再次得到完整的字符串。有没有办法纠正这个?
我想要2个输出 - 1个带有公司名称,另一个带有2个单独的向量位置。
merch_desc $ merch -
PLAYSTORE
FLOAT@THE BAY
YANTRA
AIRASIA_QS9DQQL
merch_desc $ loc -
BANGKOK
SINGAPORE
SINGAPORE
SINGAPORE
它似乎很奇怪,它适用于字符串,但不适用于数据框 -
test$desc2
[1] "qoo10 singapore " "bill payment via internet banking" "mcdonald's restaurants singapore "
[4] "hdb season parking singapore " "grabtaxi pte ltd singapore "
这不起作用 -
sub('^.* (singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$', '\\1', test$desc2 )
[1] "qoo10 singapore " "bill payment via internet banking" "mcdonald's restaurants singapore "
[4] "hdb season parking singapore " "grabtaxi pte ltd singapore "
但这有效 -
sub('^.* (singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$', '\\1', 'tigerair y843km singapore' )
[1] "singapore"
编辑2 -
使用trimws()。没有Trimws它不会处理多个空格。
谢谢, 和Manish
答案 0 :(得分:3)
我们可以使用sub
中的pattern
将子字符串捕获为组,然后在,
中的捕获组之间添加分隔符(replacement
),将其用作sep
中的read.table
。如果存在领先/滞后空格,请通过str_trim
从stringr
通过循环遍历列将其删除。
library(stringr)
d1 <- read.table(text=sub('(.*)\\s+(\\S+)$', '\\1,\\2', v1),sep=',')
d1[] <- lapply(d1, str_trim)
d1
# V1 V2
#1 PLAYSTORE BANGKOK
#2 FLOAT@THE BAY SINGAPORE
#3 YANTRA SINGAPORE
#4 AIRASIA_QS9DQQL SINGAPORE
或者根据@RichardScriven的建议,修剪前导/后退空格的base R
选项为trimws
。
d1[] <- lapply(d1, trimws)
v1 <- c('PLAYSTORE BANGKOK','FLOAT@THE BAY SINGAPORE',
'YANTRA SINGAPORE',
'AIRASIA_QS9DQQL SINGAPORE')