查找并替换列表中的示例

时间:2018-03-10 09:10:31

标签: r dataframe

我有一个名为'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))))
  }
})

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

1 个答案:

答案 0 :(得分:4)

这是做我认为你想要的一种方式。我稍微更改了您的数据结构,以便更轻松地使用(为列添加名称,并设置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)

如果您的源和目标长度相同,则可以利用分配矢量索引的功能。