将字符串答案转换为数字。

时间:2013-09-20 19:28:54

标签: regex r

我有一个向量,是“请指出你的年龄”这个问题的答案。

问题是答案是一个字符串。所以,好人们的答案会采取许多不同的,疯狂的形式。

有些答案是“32”; “32年”; “32años”; “即将完成70年”; “老了,很老了.........四十年代中期”; “到2013年10月7日,我是31yo”; “十八岁”;等等

有没有办法将尽可能多的这些数据转换为数字,其余数据转换为NA? (手工做是不可取的,因为有数千个观察结果)

谢谢!

1 个答案:

答案 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:您可能还想要删除“\”。在上面的正则表达式中,以避免非整数结果。