我有一个向量,是“请指出你的年龄”这个问题的答案。
问题是答案是一个字符串。所以,好人们的答案会采取许多不同的,疯狂的形式。
有些答案是“32”; “32年”; “32años”; “即将完成70年”; “老了,很老了.........四十年代中期”; “到2013年10月7日,我是31yo”; “十八岁”;等等
有没有办法将尽可能多的这些数据转换为数字,其余数据转换为NA? (手工做是不可取的,因为有数千个观察结果)
谢谢!
答案 0 :(得分:2)
使用此:
L <- lapply(regmatches(s, gregexpr("[0-9\\.]+",s)), as.numeric)
结果(s <- "by 7th october 2013, i'm 31yo"
):
# [[1]]
# [1] 7 2013 31
要获取带有NA
的数字向量,其中上面的列表L
包含多个数字,请使用:
result <- rep(NA, length(L))
ok <- sapply(L, length)==1
result[ok] <- unlist(L[ok])
BTW:您可能还想要删除“\”。在上面的正则表达式中,以避免非整数结果。