Манипуляции с фреймом данных - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующий кадр данных с именами станций https://i.stack.imgur.com/qOo44.png. У меня также есть два вектора от <- 1 147 141 8 и до <-147 141 8 17. Как вы можете видеть в кадре данных, столбцы «от» и «до» не совпадают с вектором. Это приводит к тому, что столбцы долготы и широты маршрута возвращаются назад. Например, вместо того, чтобы идти из Сан-Франциско в Портленд, он идет из Портленда в Сан-Франциско. Чтобы это исправить, я должен был бы изменить порядок столбцов данных, которые не совпадают с моими векторами. Таким образом, мой фрейм данных должен начинаться со строки 125 и go до 116, чтобы исправить маршрут. Это необходимо сделать для всех столбцов фрейма данных, в которых столбцы «from» и «to» не совпадают с векторами from и to. Я извиняюсь, если это было не лучшее объяснение, но это сложная топи c, чтобы объяснить. </p>

РЕДАКТИРОВАТЬ: Вот воспроизводимый код того, что текущая структура

current<-data.frame(ID= c(116,117,118,119,120,121,122,123,124,125), 
 from = c(147,147,147,147,147,147,147,147,147,147),to = c(1,1,1,1,1,1,1,1,1,1),lon=c(-122.6742,-122.6402,-122.6267,-122.5792,-122.5634,-122.5401,-122.5199,-122.5081,-122.4775,-122.4415), 
 lat= c(45.52025, 44.48824, 44.07356, 42.62986, 42.14788, 41.44040, 40.58136,40.46431 ,39.53378, 38.43697))

и что я хочу

Final<-data.frame(ID= c(125,124,123,122,121,120,119,118,117,116), 
                  from = c(1,1,1,1,1,1,1,1,1,1), to = c(147,147,147,147,147,147,147,147,147,147),lon=c(-122.4415, -122.4775, -122.5081 ,-122.5199, -122.5401, -122.5634, -122.5792,-122.6267, -122.6402, -122.6742), 
                 lat= c(38.43697 ,39.53378, 40.46431, 40.58136, 41.44040, 42.14788 ,42.62986,44.07356, 44.48824, 45.52025))

Изменение структуры должно основываться на обнаружении векторов из столбцов в текущем фрейме данных и на несоответствии им.

from<-1 147 141 8
to<-147 141 8 17

Любой Советы, помощь очень поможет, спасибо.

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете использовать индексирование в обратном направлении:

df[116:125,] <- df[125:116,]

Пример (df - это фрейм данных длиной 8):

> df$nums <- c(1,2,3,4,5,6,7,8)
> df[2:5,] <- df[5:2,]
> df$nums
[1] 1 5 4 3 2 6 7 8

Однако вам все равно придется изменить на / из векторов в этих случаях вернуться к исходным форматам или все равно будет наоборот, если я правильно читаю. Дайте мне знать, правильно ли я понял ваш вопрос.

...