我怎么创建的if-else基于函数提取字符串

问题描述 投票:0回答:1

使用定义的函数字符串提取

我写了一个代码提取字符串的一部分,但该代码不会运行。它不给我任何错误要么。请告诉我错过了什么。我想传递一个输入参数命名地址和返回值

    notes_address <- function(address) {
      address1 <- tolower(address)
      if(grepl("sent to.*. for del ", address1)) {
        address1 <- gsub(".*?sent to(.*?)(for del.*|$)", "\\1", )
      }  
      else {address1 <- NA}
      return(address1)
    }

例如,如果a <- "when you go sent to backstreet ave del to Mrs Kenwood",我希望输出是:"backstreet ave"

r
1个回答
1
投票

没有在您的示例字符串中的任何字符for,所以你的函数返回NA因为在你的函数的else一部分返回NA。你不能有预期的输出在这里。要与你的函数预期的输出:

notes_address <- function(address) {
  address1 <- tolower(address)
  if(grepl("sent to.*. del ", address1)) {
    address1 <- gsub(".*?sent to(.*?)(del.*|$)", "\\1", address1)
  }  
  else {address1 <- NA}
  return(address1)
}

a <- "when you go sent to backstreet ave del to Mrs Kenwood"
notes_address(a)

[1] " backstreet ave "

但我不知道这是你想要的。如果是,我会建议你使用stringr库与str_extract功能:

library(stringr)
str_extract(a,"(?<=sent to ).+(?= del)")

给人的输出你的函数相同

© www.soinside.com 2019 - 2024. All rights reserved.