Как заменить строки чисто числами как NA?

Я хотел бы заменить строки, содержащие чисто числа, с отсутствующим значением, NA. Я попробовал регулярные выражения ^, которые соответствуют началу строки, [:digit:], содержащие числа 0-9, и + для совпадения хотя бы 1 раз, но они не работают.

> a<-c("1111","A111","DD41412")
> a[a=="^[:digit:]+"]<-NA
> [1] "1111"    "A111"    "DD41412"

person HNSKD    schedule 29.06.2016    source источник
comment
примечание: если вы хотите использовать [:digit:], вам нужно поставить двойные скобки, например: grep("^[[:digit:]]+$", a) , иначе он просто проверит любой символ, помещенный между квадратными скобками (таким образом, :, d, ...)   -  person Cath    schedule 30.06.2016


Ответы (2)


Мы можем использовать шаблон регулярного выражения в grep и replace на основе числового индекса (логический индекс, если мы используем grepl) с NA.

a1 <- replace(a, grep("^[0-9]+", a), NA)
a1
#[1] NA        "A111"    "DD41412"
person akrun    schedule 29.06.2016
comment
спасибо, аркун, мне просто понравился этот твой ответ, чтобы оценить твой комментарий к моему вопросу. К сожалению, некоторые люди здесь просто голосуют против вопроса, если я не хочу рассказывать всю историю своей жизни, как вы видели в этом вопросе. тем не менее, я ценю ваш ответ. Спасибо - person nik; 29.06.2016

Мы также могли бы использовать это:

a[!is.na(as.integer(a))] <- NA

# [1] NA        "A111"    "DD41412"
person 989    schedule 29.06.2016