【发布时间】:2014-07-18 00:18:11
【问题描述】:
我有一个数据框如下:
plan address preferred
S3440 5301 E Huron River Dr Rm 1538 Ann Arbor, MI 48106 1-734-712-2492, xxx Not applicable
S3440 2140 E Ellsworth Rd Ann Arbor, MI 48108 1-734-477-9006, xxx Not applicable
S3440 2215 Fuller Road Ann Arbor, MI 48105 1-734-761-7933, xxx Not applicable
等等。价值约 27000 行。地址标签后面的电话号码后面还有很多,为了简洁我省略了。
我想拆分地址,基本上删除电话号码及其后面的所有内容。我已经能够通过正则表达式做到这一点:
str_split(x,'( [0-9]-[0-9]{3}-[0-9]{3}-[0-9]{4})')
我想在每一行都应用这个函数,所以我写了一个 ddply "function:"
ddply(final_data2, .(address), function(x){str_split(x,'( [0-9]-[0-9]{3}-[0-9]{3}-[0-9]{4})')})
但是,这会吐出错误:
Error: String must be an atomic vector
我不知道为什么。有人可以帮我解决这个问题吗?
谢谢
【问题讨论】:
-
什么是
class(final_data2$address)?我猜这是一个“因素”而不是“角色”。尝试使用as.character转换为字符 -
有趣,我可以轻松步行到至少其中一个地址。
-
在您的
ddply调用中,函数将(仍然)获得一个数据框,因此您的str_split()应该使用x$address。因此,从另一个角度,您也可以这样做(未测试):str_split(final_data2$address, ...)。