Mandar 已经从r 中的这个 Q/A 中慷慨地为我编写了这段代码,如何根据其他向量评估这两个向量
names(df) <- c("a","b","c","d")
df_backup <- df
df$newcol <- NA
used <- c()
for (i in seq(1,length(df$a),1)){
print("######## Separator ########")
print(paste("searching right match that fits criteria for ",df$a[i],"in column 'a'",sep=""))
valuea <- df[i,1]
orderx <- order(abs(df$b-valuea))
index=1
while (is.na(df$newcol[i])) {
j=orderx[index]
if (df$b[j] %in% used){
print(paste("passing ",df$b[j], "as it has already been used",sep=""))
index=index+1
next
} else {
indexb <- j
valueb <- df$b[indexb]
print(paste("trying ",valueb,sep=""))
if (df$c[i] != df$d[indexb]) {
df$newcol[i] <- df$b[indexb]
print(paste("using ",valueb,sep=""))
used <- c(used,df$b[indexb])
} else {
df$newcol[i] <- NA
print(paste("cant use ",valueb,"as the column c (related to index in a) and d (related to index in b) values are matching",sep=""))
}
index=index+1
}
}
}
这就是我的数据的样子
a b c d
12.9722051 297.9117268 1 1
69.64816997 298.1908749 2 2
318.8794557 169.0386352 3 3
326.1762208 169.3201391 4 4
137.5400592 336.6595313 5 5
358.0600171 94.70890334 6 6
258.9282428 94.77530919 7 7
98.57513917 290.1983195 8 8
98.46303072 290.4078981 9 9
17.2276417 344.383796 10 10
316.6442074 148.786547 11 11
310.7370168 153.3287735 12 12
237.3270752 107.8397117 13 13
250.6538555 108.0570571 14 14
337.0954288 180.6311769 15 15
137.0336521 1.0294907 16 16
301.2277242 185.2062845 17 17
332.935301 185.9792236 18 18
340.841266 220.4043846 19 19
a 和 b 列中的值是罗盘方位。目前,该公式查看 a 列中的值并将其与 b 列中的所有值进行比较,并找到最接近的值。但我意识到我需要它做的是查看 b 列中的值,但不仅要根据绝对差找到最接近的值,还要考虑到它是指南针方位。例如:对于 358.0600171 的 a 列中的值,当前公式将返回 344.383796 的 b 列中的值,该值距 358.060171 约 14 度;但是,b 列中实际最接近的方位角值应该是 1.0294907,距离 358.0600171 仅 3 度。我想在当前公式中加入一个解决此罗盘方位问题的函数:它执行我所有其他需要的评估、过滤和列创建。
这里有一个类似的查询(找到指南针的 2 度之间的最接近差异 - Javascript),但我需要有关该函数是否可以在 R 中工作以及如何将其合并到现有公式中的帮助。