我正在尝试提取并替换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
答案 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