【发布时间】:2018-08-21 17:13:16
【问题描述】:
我有一个包含许多(100+)对坐标的数据框
[lat1] [long2] [lat3] [long4] [..] [..]
30.12 70.25 32.21 70.25 .. ..
31.21 71.32 32.32 75.2 .. ..
32.32 70.25 31.23 75.0 .. ..
此函数绘制一条连接数据框前两列坐标的线
lines(mapproject(x=data$long2, y=data$lat1), col=3, pch=20, cex=.1)
我需要在每对纬度/经度坐标上执行此功能,以便为每个坐标绘制一条新的/未连接的线
看这个例子 Operate on every two columns in a matrix我想我需要创建一个列表,我该如何为每一列对做呢?
然后,我可以使用这里描述的 lapply https://nicercode.github.io/guides/repeating-things/ - 我应该如何将我的 lines() 调用包装在一个函数中?
完整脚本:
library(maps)
library(mapproj)
data <- read.csv("data.csv")
map('world', proj='orth', fill=TRUE, col="#f2f2f2", border=0, orient=c(90, 0, 0))
lines(mapproject(x=data$long, y=data$lat), col=3, pch=20, cex=.1)
更新问题
在 cmets 的帮助下,我尝试了一种在每两列上执行 sapply 的方法,这似乎可以按预期工作。这有待改进
df <- data.frame(X1 = c(0, 10, 20),
Y2 = c(80, 85, 90),
X3 = c(3, 10, 15),
Y4 = c(93, 100, 105),
X5 = c(16, 20, 35),
Y6 = c(100, 105, 130))
map('world', proj='orth', fill=TRUE, col="#f2f2f2", border=0, orient=c(90, 0, 0))
sapply(seq(1,5,by=2),function(i) lines(mapproject(x = (df[,i]), y = (df[,(i+1)])), col = 3))
【问题讨论】:
-
您可以重塑数据,对数据进行分组,然后在所有组上计算函数
-
您能否包括您期望的重构数据的样子?