如何将以某个字母开头的值更改为NA(在R中)

new*_*his 3 r recode

我有一个我称之为"鱼"的数据框.

数据框有3个不同的变量.其中一个变量称为"物种".

有些物种以字母M开头.我想改变以字母M缺失(NA)开头的物种的所有值.

当你做整个物种的名字时,我知道如何将它改为NA,但你怎么做只用字母M开头的物种呢?

我试过这个:

fish$species[fish$species=="^M_"] <- NA
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有人可以帮忙吗?

Ric*_*ven 6

您可以使用替换功能is.na<-()沿startsWith().

is.na(fish$species) <- startsWith(fish$species, "M")
Run Code Online (Sandbox Code Playgroud)

根据R文档help(startsWith),

startsWith()相当于但速度要快得多grepl("^<prefix>", x),其中prefix不包含特殊的正则表达式字符.

上面的代码假定一个字符列.对于因子列,您可以更改适当的级别.

is.na(levels(fish$species)) <- startsWith(levels(fish$species), "M")
Run Code Online (Sandbox Code Playgroud)

另一种方法是更换levels<-(),NA用于右侧的更换.

levels(fish$species)[startsWith(levels(fish$species), "M")] <- NA
Run Code Online (Sandbox Code Playgroud)

请注意,grepl()如果您愿意,绝对可以使用,但这个问题似乎是使用新startsWith()功能的一个很好的例子.

另请注意,所有这些都已在iris数据集上成功测试.