仅将数字输入留空

时间:2018-10-08 15:02:06

标签: r

我有一个带有英国邮政编码的数据框。不幸的是,一些邮政编码数据不正确-即它们只是数字(所有英国邮政编码都应以字母字符开头)

我进行了一些研究,发现grepl命令(如果该条目仅是数字的话)可用于生成TRUE / FALSE向量

Data$NewPostCode <- grepl("^.*[0-9]+[A-Za-z]+.*$|.*[A-Za-z]+[0-9]+.*$",Data$PostCode)

但是,我真正想做的是实例以一个数字开头以使邮政编码为空白。

请注意,我不想删除邮政编码错误的行,因为我将从其他变量中丢失信息。我只想删除该邮政编码

示例数据

Area               Postcode
Birmingham         B1 1AA
Manchester         M1 2BB
Bristol            BS1 1LM
Southampton        1254
London             1290C
Newcastle          N1 3DC

所需的输出

Area               Postcode
Birmingham         B1 1AA
Manchester         M1 2BB
Bristol            BS1 1LM
Southampton        
London             
Newcastle          N1 3DC

1 个答案:

答案 0 :(得分:1)

在TRUE / FALSE向量和您想要的任务类型之间有几种选择,但是我更喜欢ifelse。生成所需逻辑向量类型的一种更简单的方法是

grepl("^[0-9]", Data$PostCode)

,只要PostCode以数字开头,则为TRUE,否则为FALSE。如果您的需求更复杂,则可能需要调整正则表达式。

然后您可以定义一个新列,每当向量为TRUE时为空白,而当向量为FALSE时则为旧值,如下所示:

Data$NewPostCode <- ifelse(grepl("^[0-9]", Data$PostCode), "", Data$PostCode)

(我可以建议使用NA而不是空白吗?)