r语言 - 从列表中查找并替换为示例



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

out<-data.frame(c("Normal","Normal","Abnormal","Normal","Abnormal","Abnormal","Normal","Abnormal"))

我想用从列表中采样的字符串替换"Normal",如下所示

mychoices<-(x="Really bad",x="so so", x="Actually OK")

我试过:

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))))
  }
})

但它返回数据帧中的列表。

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

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)

这利用了分配一组向量索引的功能,前提是源和目标的长度相同。

最新更新