Вопросы о пространственном объединении в R

У меня возникли проблемы при попытке пространственного соединения между шейп-файлом и таблицей данных в csv.

Here's what my data looks like:
Point Shapefile's attribute data (StudentID):
ID      Address  Long  Lat
123.00  street   long  lat
456.00  street   long  lat
789.01  street   long  lat
223.00  street   long  lat
412.02  street   long  lat

Data Table (Table):
ID     Name Age School
123.00 name age school
456.00 name age school
789.01 name age school
223.00 name age school
412.02 name age school

Важное примечание: StudentID содержит примерно 500 записей, тогда как в таблице только 250. Некоторые записи в StudentID НЕ будут совпадать.

Проблема 1:

У меня есть файл Excel, который я преобразовал в csv для импорта в R. При выполнении объединения я заметил, что некоторые из моих форматов данных изменились в столбце идентификатора (так что 123.00 станет 123; 456.00 до 456; 789.01 то же самое). Однако, когда я открыл файл csv в блокноте, форматирование было правильным. Я попытался прочитать таблицу как файл .txt, но безуспешно. Кто-нибудь знает, почему это происходит и как это преодолеть?

Поскольку я не мог объединить данные на основе точного совпадения, я решил попробовать частичное соединение, потому что IDS уникальны независимо от последних двух цифр, что привело меня к проблеме 2...

Проблема 2:

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

StudentID@data = data.frame(StudentID@data, data[charmatch(StudentID@data$ID,Table$ID,])

Это объединило данные, но также, как и ожидалось, вернуло строки с NA. Я использовал na.omit для удаления строк, и полученные данные содержали все совпадающие. Однако в шейп-файле ВСЕ мои точки остались. Почему эти точки остались, когда записи были удалены?


person user2142810    schedule 07.03.2013    source источник
comment
Ваша потеря .00 может быть проблемой Excel - я помню, что он делает непредсказуемые вещи при экспорте в csv. Для «присоединения» вы пытались использовать merge?   -  person alexwhan    schedule 07.03.2013
comment
@alexwhan: я думаю, что слияние шейп-файлов - не лучший подход. После слияния порядок строк может быть смешанным, тогда как порядок связанных фигур/точек не обновляется автоматически. Таким образом, подход соответствия здесь более уместен.   -  person yellowcap    schedule 07.03.2013


Ответы (1)


Проблема 1:

Excel иногда экспортирует плавающие значения, используя запятую , в качестве десятичного разделителя. Это может привести к проблемам с импортом csv. Убедитесь, что excel использует точки . для десятичных разделителей, или укажите разделитель при импорте, т.е. read.csv('file.csv', sep=';').

Проблема 2: Если вы хотите удалить точки со значениями na из шейп-файла, вам нужен логический вектор для выбора строк, которые вам больше не нужны. Вот пример того, как это может выглядеть (при условии, что ваш шейп-файл называется student_points)

student_points <- student_points[!is.na(student_points@data$age), ]

person yellowcap    schedule 07.03.2013