【发布时间】:2019-11-24 04:16:22
【问题描述】:
longtidue <- c('517W', '595W', '433W', '450E', '659E', '682W', '678W', '546E', '462W', '500W')
latitude <- c('291N','202N', '276N', '269S', '279N', '294N', '252N', '254S', '248N', '258N')
df <- data.frame(latitude, longitude)
是我正在使用的数据库示例,它处理以以下格式显示的经纬度坐标:
240N、707W、267S、130E
我需要处理这些坐标,以便它们可以在采用以下形式的坐标的模型中使用:
24.0, -70.7, -26.7, 13.0
(在模型中,北和东被认为是正方向。)
目标是能够遍历整个列,并确定单元格中是否存在“N”或“S”。从那里我想删除字母,然后将剩余的数字除以 10 或 -10 以给出正确的符号。如果列中既没有出现 N 也没有出现 S,我希望代码单独保留单元格,这就是我在下面发布的示例代码末尾的 else 语句的原因。为了处理列中的所有数据,我尝试使用 elseif 语句,但我不确定如何让它工作。我最终进入了一个 if 条件如下所示的 for 循环:
for (i in 1:nrow(df)) {
if (grepl("N",df$latitude, fixed = TRUE)) {
df$latitude <- gsub("N", "",df$latitude) & df$latitude <- df$latitude/(10)
} else if (grepl("S",df$latitude, fixed = TRUE)) {
df$latitude <- gsub("S", "",df$latitude) & df$latitude <- as.numeric(df$latitude) & df$latitude <- df$latitude/(-10)
} else (df$latitude)
}
但这要么给我一个错误,df$latitude/(10) 说“非数字参数到二元运算符”从数据从字符转换为数字(?)和/或警告“条件的长度 > 1,并且只会使用第一个元素”。我对 R 和堆栈溢出也很陌生,所以如果我的代码可以更好地格式化,请告诉我。
提前致谢!
【问题讨论】:
-
作为一般规则,如果您循环遍历
i并且不要在循环内使用i,那就有问题了。
标签: r if-statement grepl