1

我有一个如下所示的数据框,其中第 2 列和第 3 列是因子。

radio <- data.frame(id = 1:6, snp1 = c("C/T", "C/T", "C/T", "Not aplif", "C/T", "Not amplf"), snp2 = c("A/G", "C/T", "A/G", "Not amplif", "C/T", "C/T"))

我想用“NOT AMPLIFIED”替换每个“Not amplif”,但请注意我在这个字符串中有拼写错误,唯一始终正确的部分是“Not”。所以我尝试了以下方法:

radio[ ,c(2,3)][grep("Not", radio[ ,c(2,3)], ignore.case = TRUE), ] <- "NOT AMPLIFIED"

但这可能给我一个错误,因为我正在处理因素。然后我尝试将其转换为字符。

radio[ ,c(2,3)] = lapply(radio[ ,c(2,3)], as.character)

我再次尝试了替换步骤,但现在我用“NOT AMPLIFIED”替换了整行,而不仅仅是我的目标字符串。

请帮忙。

4

1 回答 1

3

您收到错误是因为radio[ ,c(2,3)]仍然是数据框(您选择了 2 列),而不是字符向量。您可以通过几种方式获得预期的结果,但这有效

data.frame(lapply(radio, gsub, pattern = "[nN]ot.*$", replacement = "NOT AMPLIFIED"))

按列拆分数据帧(因为数据帧也被秘密列出),用gsub“未放大”替换“不和之后的任何内容”,然后将其转换回数据帧。

于 2013-05-05T02:18:27.590 回答