Вот решение с использованием пакета tidyr. При этом предполагается, что первая строка каждой группировки данных является строкой "/ 6/0/0", а вторая строка - "/6/0/1".
df<-structure(list(resourcePath = structure(c(5L, 6L, 2L, 1L, 2L,
1L, 3L, 4L, 5L, 6L, 3L, 4L), .Label = c("/3300/289/5700", "/3300/515/5700",
"/3304/0/5700", "/3315/0/5700", "/6/0/0", "/6/0/1"), class = "factor"),
value = c(48.18, 16.39, 34, 15, 55, 9004, 367, 47, 50.34,
20.52, 84, 56), UTC = structure(c(1L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L, 9L, 10L, 11L), .Label = c("14:51:43", "14:52:43",
"14:53:43", "14:53:47", "14:54:23", "14:54:34", "14:54:54",
"14:57:11", "14:57:13", "14:57:34", "14:57:45"), class = "factor"),
lat = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L),
long = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("resourcePath",
"value", "UTC", "lat", "long"), class = "data.frame", row.names = c(NA,
-12L))
f$resourcePath<-as.character(df$resourcePath)
#reset lat and long columns to NA for the fill command
df$lat<-NA
df$long <- NA
#find rows with the lat resource
#assumes this is the first row of each data grouping
latrows<-which(df$resourcePath=="/6/0/0")
df$lat[latrows]<-df$value[latrows]
df$long[latrows]<-df$value[(latrows+1)]
library(tidyr) #needed for the fill function
df<-fill(df, lat, long)
Редактирование заметки: это улучшение производительности по сравнению с первоначальной версией, при условии, что порядок данных в кадре данных согласован.