I am having problems implementing my script because of this error:
Error: All select() inputs must resolve to integer column positions.
I found the same error from these links:
I am calculating the distance between lat-lon points using R. Here's my script:
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
file 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
The "SN" column is a unique identifier in file1. What I want to do:
[1] Calculate the distance(jtwc$dist) when the two files have the same Year,Month,Day, and Hour.
[2] In case a row has the same Year,Month,Day,and Hour but different SN number in file1,I will use the values in the row with the same Year,Month,Day,and Hour in file2 in computing the distance.
Any suggestions on how to do this correctly?
You should have read about ?mutate_at
, where you can find a lot of examples how to use it; And your problem is that you are passing the actual columns to .vars while you should use one of the following:
?select_helpers
with vars
; vars
with a sequence colA:colB
notation; For your case you simply need a vector of column names, besides no need to refer to the parent data frame with df$...
in mutate
, just use the column name:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.