Перебирайте строки данных и добавляйте значение в новый столбец (R) - PullRequest
0 голосов
/ 07 июня 2018

У меня есть фрейм данных (df) со столбцом Широта (Широта), и мне нужно сопоставить соответствующее значение долготы (основываясь на отношениях в другом наборе данных).Имя нового столбца равно «Long_matched».

Здесь я пытаюсь записать новое значение в столбце «Long_matched» в соответствующей строке в широтах от -33,9238 до -33,9236.Данные в 'Lat' имеют намного больше десятичных разрядов (например: -33.9238026666667, -33.9236026666667 и т. Д.).Поскольку я буду применять этот код к нескольким наборам данных в одном и том же географическом местоположении (следовательно, длинные десятичные знаки будут немного отличаться), я хочу записать значения долготы, которые находятся в диапазоне 0,0002 градуса.

Некоторые попытки кода, которые я пробовал, включают:

df$Long_matched <- ifelse(df$Lat< -33.9236 & df$Lat> -33.9238, 151.2279 , "N/A")

или

df$Long_matched[df$Lat< -33.9236 & df$Lat> -33.9238] <- 151.2279

Я думаю, что мне нужно использовать цикл for для циклического перемещения по строкам иЕсли заявление, но изо всех сил пытается понять это - любая помощь будет оценена!

Результирующий вывод должен выглядеть примерно так:

Lat                   Long_matched
-33.9238026666667     151.2279
-33.9236026666667     (new long value will go here)

1 Ответ

0 голосов
/ 07 июня 2018

Все, что сказано в комментариях, применимо, но вот хитрость, которую вы можете попробовать: В следующем коде вам нужно будет заменить текст цифрами.

Latitude_breaks <- seq(min_latitude, max_latitude, 0.0002) # you need to replace `min_latitude`, `max_latitude`, and `increment` with numbers
Longitude_values <- seq(first, last, increment) # you need to replace `first`, `last` and `increment` with numbers
df <- within(df, {
  # make a categorical version of `Lat`
  Lat_cat <- cut(Lat, Latitude_breaks)
  Long_matched <- Longitude_values[Lat_cat]
})

Несколько примечаний:

  1. значения между min_latitude и min_latitude + 1 будут присвоены значениям Longitude, отмеченным первыми.
  2. Длина Latitude_beaks должна быть на единицу больше, чем длина Longitude_values.
  3. Значения Lat за пределами Latitude_breaks станут NA.

Это работаетиспользуя приятную особенность факторов - они хранятся в виде целых чисел.Таким образом, мы можем использовать их для индексации другого вектора - в данном случае, Longitude_values.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...