R 从列表中查找并替换为示例

R 从列表中查找并替换为示例,r,dataframe,R,Dataframe,我有一个名为“out”的数据帧,其中包含以下字符串 out<-data.frame(c("Normal","Normal","Abnormal","Normal","Abnormal","Abnormal","Normal","Abnormal")) 但它只替换为整个列表中的一个。我也试着用函数来包装它 out2 <- apply(out, 1, function(x) { if (stringr::str_detect(x, "Normal")) { return(s

我有一个名为“out”的数据帧,其中包含以下字符串

out<-data.frame(c("Normal","Normal","Abnormal","Normal","Abnormal","Abnormal","Normal","Abnormal"))
但它只替换为整个列表中的一个。我也试着用函数来包装它

out2 <- apply(out, 1, function(x) {
  if (stringr::str_detect(x, "Normal")) {
    return(str_replace_all(out[,1],"Normal", as.character(sample(mychoices,1,replace=F))))
  }
})

out2这是我认为你想要的一种方式。我稍微更改了您的数据结构,使其更易于使用(为列命名,并设置
stringsAsFactors=FALSE

out
str_replace_all(out[,1],"Normal", as.character(sample(mychoices,1,replace=F)))
out2 <- apply(out, 1, function(x) {
  if (stringr::str_detect(x, "Normal")) {
    return(str_replace_all(out[,1],"Normal", as.character(sample(mychoices,1,replace=F))))
  }
})
out <- data.frame(abornorm = c("Normal","Normal","Abnormal","Normal","Abnormal","Abnormal","Normal","Abnormal"), stringsAsFactors = FALSE)

out$abornorm[out$abornorm == "Normal"] <- sample(c("Really bad", "so so", "Actually OK"), sum(out$abornorm == "Normal", na.rm = TRUE), replace = TRUE)