gpt4 book ai didi

r - 尝试遍历数据帧并引用多个字段

转载 作者:行者123 更新时间:2023-12-04 11:54:30 25 4
gpt4 key购买 nike

我有一个包含地址、城市、州、 zip 实体的数据框。从那里,我尝试使用 Yahoo API 对每个地址进行地理编码。

我基于 O'Reilly's Data Mashups 中的代码使用 R 教程。原始示例采用街道地址向量并使用硬编码城市。我正在尝试制作一个支持多个城市的动态示例。

代码的缩写版本是:

    geocodeAddresses<-function(myStreets)
}
appid<-'<put your appid here>'
baseURL<-"http://local.yahooapis.com/MapsService/V1/geocode?appid="
myGeoTable<-data.frame(address=character(),lat=numeric(),long=numeric(),EID=numeric())
for (myStreet in myStreets){
requestUrl<-paste(baseURL, appid, "&street=", URLencode(myStreet$address),"&city=",URLencode(myStreet$city),"&state=",URLencode(myStreet$state),sep="")
xmlResult<-xmlTreeParse(requestUrl,isURL=TRUE,addAttributeNamespaces=TRUE)
geoResult<-xmlResult$doc$children$ResultSet$children$Result
lat<-xmlValue(geoResult[['Latitude']])
long<-xmlValue(geoResult[['Longitude']])
myGeoTable<-rbind(myGeoTable,data.frame(address=myStreet,Y=lat,X=long,EID=NA))
}
}

当我尝试引用 myStreet$City 和 myStreet$Address 时,收到错误
$ operator is invalid for atomic vectors

除了遍历数据框 myStreets 之外,我不知道如何只为每一行调用一次 Yahoo API,并为每个成员存储 long/lat。

最佳答案

myStreets是 data.frame 然后 for循环获取它的每一列。所以第一步需要 Addres 和 Addres$City 没有意义。

你可以换 for循环遍历行的条件:

for (i in 1:nrow(myStreets))  {
myStreet <- myStreets[i,]
# rest is the same
}

要优化您的代码,您还可以执行以下操作:
myGeoTable <- data.frame( address=myStreet$address, lat=NA_real_, long=NA_real_, EID=NA_real_)
for (i in 1:nrow(myStreets)) {
myStreet <- myStreets[i,]
requestUrl <- ...
...
myGeoTable[i,2:4] <- c(lat,long,NA)
}

关于r - 尝试遍历数据帧并引用多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1489526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com