我有一个带有地理位置的数据框。位置是字符串。 这是我的功能,可以抓取字符串并通过Degress.Decimal获取位置。
示例位置23º30.0'N
v
结果> 23.5
然后,我想在原始数据框中创建一个新列,将该功能应用于“纬度”列中的每个项目。 经度是否相同。另一个新列
我知道如何使用Python和Pandas来做到这一点,因为我是R的新手,却找不到解决方案。
我正在与
latitud.decimal <- function(y) {
latregex <- str_match(y,"(\\d+)º\\s(\\d*.\\d*).(.)")
latitud <- (as.numeric(latregex[1,2])) +((as.numeric(latregex[1,3])) / 60)
if (latregex[1,4]=="S") {latitud <- -1*latitud}
return(latitud)
}
但不要读取每个列值的y“参数”。
答案 0 :(得分:2)
请注意,str_match
是矢量化的,如功能help("str_match")
的帮助页面中所述。
为了回答这个问题,我缺乏可复制的示例和数据。 withUnsafeBufferPointer(_:)
描述了人们如何提出更有可能被再现的问题,从而获得更好的答案。
由于我缺乏数据和代码,因此无法测试我是否真的在现场,但无论如何我都会试一试。
利用str_match
被向量化的事实,我们可以不使用lapply来应用整个函数,从而简单地创建一个新列。我将略微重写您的函数,以合并向量化。请注意,1
中缺少的latregex[., .]
latitud.decimal <- function(y) {
latregex <- str_match(y,"(\\d+)º\\s(\\d*.\\d*).(.)")
latitud <- as.numeric(latregex[, 2]) + as.numeric(latregex[, 3]) / 60)
which_south <- which(latregex[, 4] == "S")
latitud[which_south] <- -latitud[which_south]
latitud
}
现在函数已准备就绪,可以使用$
运算符来创建列。如果数据非常大,则可以使用data.table
来更有效地执行。有关如何通过data.table包进行分配的示例,请参见init(cString:)
页。
在基数R中,我们将简单地执行
datos$new_column <- latitud.decimal(datos$Latitude)
答案 1 :(得分:1)
datos$lat_decimal = sapply(datos$Latitude, latitud.decimal)