【发布时间】:2017-10-13 11:30:36
【问题描述】:
我有两个 csv 文件,如果满足四个条件,我想比较它们并执行函数/计算。
文件1:
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
只要它们具有相同的年、月、日、小时,我就会尝试从这两个文件中计算经纬度点之间的距离。这是我的代码:
jtwc <-read.csv("file1.csv",header=T,sep=",")
stn <-read.csv("file2.csv",header=T,sep=",")
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))
}
jtwc$dist<- great_circle_distance(dms_to_rad(jtwc$Lat,0,0),dms_to_rad(jtwc$Lon,0,0),dms_to_rad(stn$Lat,0,0),dms_to_rad(stn$Lon,0,0))
write.csv(stn,file="dist.csv",row.names=T)
“SN”列是 file1 中的唯一标识符。我想做什么:
[1] 计算两个文件年、月、日、时相同时的距离(jtwc$dist)。
[2] 如果文件1中的行具有相同的年月日小时但不同的SN号,我将使用具有相同年月的行中的值,文件2中的日和小时计算距离。
输出应该是这样的:
SN CY Year Month Day Hour Lat Lon dist
196101 1 1961 1 14 12 8.3 134.7 1620.961
196101 1 1961 1 14 18 8.8 133.4 1467.859
196101 1 1961 1 15 0 9.1 132.5 1334.382
196101 1 1961 1 15 6 9.3 132.2 1324.915
196125 1 1961 1 14 12 10.0 136 1687.127
196125 1 1961 1 14 18 10.5 136.5 1724.351
关于如何正确执行此操作的任何建议?
【问题讨论】: