我有一个带有英国邮政编码的数据框。不幸的是,一些邮政编码数据不正确-即它们只是数字(所有英国邮政编码都应以字母字符开头)
我进行了一些研究,发现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
答案 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而不是空白吗?)