我有一个名为try_out的数据框,其中包含raw_street,raw_number,raw_postalCode和raw_locality以及大约1000行
列我写了一个函数google_clean,它将街道,数字,邮政编码和地点作为参数。
此循环可用于清除所有地址:
for(i in 1:length(try_out)){
google_clean(try_out[i, "raw_street"],
try_out[i, "raw_number"],
try_out[i, "raw_postalCode"],
try_out[i, "raw_locality"])
}
但有人可以建议我如何用R中的apply函数更好地写这个吗?
答案 0 :(得分:1)
你可以重写google_clean
函数,这样它就不需要取这4个参数,而是需要一个长度为4的向量。那么像这样的一行应该可以迭代try_out
的行:< / p>
new_object = apply(try_out,1,google_clean)
您可能需要转置new_object
,因为try_out
中的行数将等于new_object
中的列数。
答案 1 :(得分:1)
这应该有效:
mapply(google_clean,
try_out[,"raw_street"],
try_out[,"raw_number"],
try_out[,"raw_postalCode"],
try_out[,"raw_locality"])
答案 2 :(得分:1)
(你在问题中提到1:length(try_out),但也许你的意思是nrow(try_out)?)使用Map
将函数应用于多个参数;使用with
with(try_out, {
Map(google_clean, raw_street, raw_number, raw_postalCode, raw_Locality)
})
它值得使用Map(和其他应用函数),因为它管理为您创建结果列表,并且因为它提供了矢量化的机会。特别是你的google_clean函数应该可以用于raw_street等的向量,而不是scalars,所以你要编写
with(try_out, google_clean(raw_street, raw_number, raw_postalCode, raw_Locality))