如何使用ifelse对正则表达式使用多个条件?

时间:2019-10-18 09:12:23

标签: r regex data.table

我正在尝试提取并替换client列中的'?'(如果它与group = SA匹配,并以'AWS'作为客户端而不是'?)。这里 '?'可 '?'要么 '?????'要么 ??。但是,这似乎行不通。有人可以帮忙吗?我正在使用R

谢谢

test[,Client:=ifelse(Group=='SA'&Client==grepl('\\?+',Client,perl = T),'AWS',Client)]

样本数据

client<-c('?','???','????')
GROUP<-c('SA','SA','SA')
df <- melt(data.frame(client,GROUP))

最终结果应为

Client GROUP
AWS     SA

1 个答案:

答案 0 :(得分:3)

似乎您正在将data.table语法与数据帧混合在一起。 data.table的用法如下:

DT[i, j, by] 

要替换data.table的子集中的值,请首先在i中声明您的子集,然后对j中的列进行操作。如果我正确理解了您的问题,那么您首先要选择GROUP == "SA"的所有行,然后用?替换一个或多个AWS

library(data.table)
library(stringr)

client<-c('?','???','????')
GROUP<-c('SA','SA','SA')
dt <- data.table(client,GROUP)

dt[GROUP == "SA", client := str_replace(client, "\\?+", "AWS")]
#    client GROUP
# 1:    AWS    SA
# 2:    AWS    SA
# 3:    AWS    SA