你可以
unlist
创建一个重新排列的矩阵。
d <- matrix(unlist(t(df[3:6])), ncol=2, byrow=TRUE)
setNames(data.frame(do.call(cbind, lapply(list(df$ID, as.character(df$OB)),
function(x) rep(x, each=2))),
c("start", "stop"),
d), c(names(df)[1:3], "lat", "lon"))
# ID OB lat_start lat lon
# 1 1 A start 44.74192 15.023044
# 2 1 A stop 39.22228 7.119066
# 3 2 A start 40.87060 11.810682
# 4 2 A stop 41.44242 14.640227
# 5 3 A start 42.72626 16.036847
# 6 3 A stop 41.73336 11.386723
# 7 4 A start 43.26573 11.874572
# 8 4 A stop 43.27190 8.437383
# 9 5 B start 42.80854 14.609739
# 10 5 B stop 41.43149 11.656165
# 11 6 B start 41.78775 16.573291
# 12 6 B stop 36.68709 14.429349