Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在字符串内容上创建新变量_Regex_R - Fatal编程技术网

Regex 在字符串内容上创建新变量

Regex 在字符串内容上创建新变量,regex,r,Regex,R,如果我有这些字符串: dat <- data.frame(xxs = c("PElookx.PElookxstd","POaftGx.POlookGxstd")) 我知道如何使用grep来实现这一点: dat$newxss <- NA dat$newxss[grep("PE",dat$xxs)] <- "NOW" dat$newxss[grep("PO",dat$xxs)] <- "LATER" 有没有比很多grep更简单的方法?因为我必须为同一个新列和许多新列的多个

如果我有这些字符串:

dat <- data.frame(xxs = c("PElookx.PElookxstd","POaftGx.POlookGxstd"))
我知道如何使用grep来实现这一点:

dat$newxss <- NA
dat$newxss[grep("PE",dat$xxs)] <- "NOW"
dat$newxss[grep("PO",dat$xxs)] <- "LATER"
有没有比很多grep更简单的方法?因为我必须为同一个新列和许多新列的多个字符串位执行此操作。

如果所有字符串中都明确包含PE或PO,则可以使用ifelse:

例如:

如果所有字符串中都明确包含PE或PO,则可以使用ifelse:

例如:


如果要执行不同的替换,则可以创建一个自定义函数来同时执行所有替换,例如:

subst <- function(var, corresp) {
  sapply(corresp, function(elem) {
    var[grep(elem[1],var)] <- elem[2]
  })
}

var <- c("PEfoo", "PObar", "PAfoofoo", "PUbarbar")
corresp <- list(c("PE","NOW"),
                c("PO","LATER"),
                c("PA", "MAYBE"),
                c("PU", "THE IPHONE IS IN THE BLENDER"))
subst(var, corresp)
因此,您可以将函数重复应用于数据框的不同列:

dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...

如果要执行不同的替换,则可以创建一个自定义函数来同时执行所有替换,例如:

subst <- function(var, corresp) {
  sapply(corresp, function(elem) {
    var[grep(elem[1],var)] <- elem[2]
  })
}

var <- c("PEfoo", "PObar", "PAfoofoo", "PUbarbar")
corresp <- list(c("PE","NOW"),
                c("PO","LATER"),
                c("PA", "MAYBE"),
                c("PU", "THE IPHONE IS IN THE BLENDER"))
subst(var, corresp)
因此,您可以将函数重复应用于数据框的不同列:

dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...

你所有的字符串都有PE或PO吗?你所有的字符串都有PE或PO吗?
[1] "NOW"                          "LATER"                       
[3] "MAYBE"                        "THE IPHONE IS IN THE BLENDER"
dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...