由于此错误,我在执行脚本时遇到问题:
Error: All select() inputs must resolve to integer column positions.
我从这些链接中发现了同样的错误:
我正在使用R计算lat-lon点之间的距离。 这是我的剧本:
library(tidyverse)
#functions
dms_to_rad <- function(d, m, s) (d + m / 60 + s / 3600) * pi / 180
great_circle_distance <- function(lat1, long1, lat2, long2) {
a <- sin(0.5 * (lat2 - lat1))
b <- sin(0.5 * (long2 - long1))
12742 * asin(sqrt(a * a + cos(lat1) * cos(lat2) * b * b))
}
#read file
dir1 = "JTWC_1979.csv"
dir2 = "Ambulong_proc_1979.csv"
jtwc <- read.csv(dir1) %>%
unite('key',c('Year','Month','Day','Hour'))
stn <- read.csv(dir2) %>%
unite('key',c('Year','Month','Day','Hour'))
#aggregating
stn <- left_join(jtwc,stn,by = "key") %>%
drop_na() %>%
mutate_at(vars(Lat.x,Lon.x,Lat.y,Lon.y),funs(dms_to_rad(.,0,0))) %>%
mutate(dist = great_circle_distance(Lat.x,Lon.x,Lat.y,Lon.y))
write.csv(stn,file="dist.csv",row.names=T)
File1中:
SN CY Year Month Day Hour Lat Lon
196101 1 1961 1 14 12 8.3 134.7
196101 1 1961 1 14 18 8.8 133.4
196101 1 1961 1 15 0 9.1 132.5
196101 1 1961 1 15 6 9.3 132.2
196101 1 1961 1 15 12 9.5 132
196101 1 1961 1 15 18 9.9 131.8
196125 1 1961 1 14 12 10.0 136
196125 1 1961 1 14 18 10.5 136.5
文件2:
Year Month Day RR Hour Lat Lon
1961 1 14 0 0 14.0917 121.055
1961 1 14 0 6 14.0917 121.055
1961 1 14 0 12 14.0917 121.055
1961 1 14 0 18 14.0917 121.055
1961 1 15 0 0 14.0917 121.055
1961 1 15 0 6 14.0917 121.055
&#34; SN&#34; column是file1中的唯一标识符。我想做什么:
[1]当两个文件具有相同的年,月,日和小时时,计算距离(jtwc $ dist)。
[2]如果一行具有相同的年,月,日和小时但文件1中的SN号不同,我将使用file2中具有相同年,月,日和小时的行中的值计算距离。
有关如何正确执行此操作的任何建议吗?
答案 0 :(得分:1)
您应该阅读?mutate_at
,其中您可以找到很多如何使用它的示例;您的问题是您将实际列传递给 .vars ,而您应该使用以下其中一项:
?select_helpers
与vars
; vars
,带有序号colA:colB
表示法; 对于您的情况,您只需要一个列名称向量,除了不需要在df$...
中使用mutate
引用父数据框,只需使用列名称:
left_join(jtwc,stn,by = "key") %>%
drop_na() %>%
mutate_at(c("Lat.x", "Lon.x", "Lat.y", "Lon.y"), funs(dms_to_rad(., 0, 0))) %>%
mutate(dist = great_circle_distance(Lat.x, Lon.x, Lat.y, Lon.y))
# SN CY key Lat.x Lon.x RR Lat.y Lon.y dist
#1 196101 1 1961_1_14_12 0.1448623 2.350959 0 0.2459466 2.112808 1620.961
#2 196101 1 1961_1_14_18 0.1535890 2.328269 0 0.2459466 2.112808 1467.859
#3 196101 1 1961_1_15_0 0.1588250 2.312561 0 0.2459466 2.112808 1364.150
#4 196101 1 1961_1_15_6 0.1623156 2.307325 0 0.2459466 2.112808 1324.915
#5 196125 1 1961_1_14_12 0.1745329 2.373648 0 0.2459466 2.112808 1687.127
#6 196125 1 1961_1_14_18 0.1832596 2.382374 0 0.2459466 2.112808 1724.351