EDIT Благодаря @ user5249203, указав, что геокодирование лучше всего делать с помощью геокодирования ggmaps. Однако следите за NA.применяет функцию к каждой ячейке в столбце кадра данных в R
Я борюсь с apply
семьи в R.
Я использую function которая принимает строку и возвращает долготу и широту
> gGeoCode("Philadelphia, PA") [1] 39.95258 -75.16522
У меня есть простой dataframe который имеет имена всех 52 штатов:
dput(state_lat_long)
structure(
list(State = structure(
c(
32L, 28L, 43L, 5L, 23L, 34L,
30L, 13L, 14L, 38L, 22L, 25L, 15L, 20L, 24L, 40L, 46L, 21L, 9L,
18L, 48L, 10L, 7L, 4L, 3L, 31L, 35L, 37L, 49L, 44L, 12L, 6L,
17L, 36L, 11L, 39L, 42L, 8L, 47L, 33L, 16L, 1L, 29L, 27L, 26L,
19L, 41L, 50L, 2L, 45L
), .Label = c(
"alabama", "alaska", "arizona",
"arkansas", "california", "colorado", "connecticut", "delaware",
"florida", "georgia", "hawaii", "idaho", "illinois", "indiana",
"iowa", "kansas", "kentucky", "louisiana", "maine", "maryland",
"massachusetts", "michigan", "minnesota", "mississippi", "missouri",
"montana", "nebraska", "nevada", "new hampshire", "new jersey",
"new mexico", "new york", "north carolina", "north dakota", "ohio",
"oklahoma", "oregon", "pennsylvania", "rhode island", "south carolina",
"south dakota", "tennessee", "texas", "utah", "vermont", "virginia",
"washington", "west virginia", "wisconsin", "wyoming"
), class = "factor"
)), .Names = "State", row.names = c(NA,-50L), class = "data.frame"
)
Практиковать мои apply
, я просто хочу применить gGeoCode
к каждой ячейке в единственном столбце фрейма данных state_lat_long
.
Не может быть намного проще.
Тогда в чем проблема с этим?
> View(apply(state_lat_long, function(x) gGeoCode(x)))
Когда я запускаю это, я получаю:
Error in View : argument "FUN" is missing, with no default
, которую я не понимаю, потому что FUN
не хватает.
Итак, давайте попробуем sapply
. Это должно быть просто, не так ли?
Но что не так с этим?
View(sapply(state_lat_long$State, function(x) gGeoCode(x)))
Когда я запускаю это, я получаю 2 строки с 50 колоннами, наполненную NA
с. Я не могу понять это.
Далее я попытался
View(apply(state_lat_long, 2, function(x) gGeoCode(x)))
и я получил
State
40.71278
-74.00594
Опять же, это не имеет никакого смысла!
Что я делаю неправильно? Благодарю.
Вы должны ввести 3-х аргументов, когда вы делаете подать заявление. Первый из них - ваш объект (например, dataframe), второй указывает, следует ли применять по строкам или столбцам (вам понадобится 2 для столбцов), а третий - FUN. В вашем коде отсутствовал третий аргумент, поэтому попробуйте View (apply (state_lat_long, 2, function (x) gGeoCode (x))) – hodgenovice
можете ли вы проверить мое редактирование на исходный вопрос? –
Может быть, я перепутался, и это должно быть View (apply (state_lat_long, 1, function (x) gGeoCode (x)))? Если нет, это, вероятно, менее просто, чем я думал, и мне нужно будет увидеть, что код, который вы использовали для gGeoCode, может быть полезен (что я могу или не могу). – hodgenovice