【问题标题】:How to use multiple conditions for regex using ifelse?如何使用 ifelse 为正则表达式使用多个条件?
【发布时间】:2019-10-18 09:12:23
【问题描述】:

我正在尝试提取并替换客户端列中的“?”,如果它与 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

【问题讨论】:

  • 请通过显示之前和之后的示例数据来重新表述您的问题。

标签: r regex data.table


【解决方案1】:

您似乎将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

【讨论】:

  • 我收到此错误“[.data.table(test, GROUP == "SA", :=(Client, str_replace(Client, : i 计算为逻辑向量长度 3 但有264997 行。不再允许对逻辑 i 进行回收,因为它隐藏的错误超出了罕见的便利性。如果您确实需要回收,请显式使用 rep(...,length=.N)。"
  • @A380 你能打印names(test) 的输出吗?我怀疑您的data.table 中没有GROUP 列,因此子集尝试使用我的示例中定义的长度为3 的变量GROUP 评估GROUP == "SA"
  • 是的,我把它作为“组”放在我的桌子上,谢谢
猜你喜欢
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多