/ / Using ddply, aby zastosować funkcję na ramce danych z wieloma wejściami - r

Używanie polecenia ddply do zastosowania funkcji na ramce danych z wieloma wejściami - r

Powiedz, że mam:

df = data.frame(loc=c("The White House", "Lancaster, PA", "Durham, NC"),
id=c(111,222,333))

Chcę przekazać lokalizację do procedury geokodowania (którą pracuję) wraz z numerem identyfikacyjnym, aby można było dołączyć identyfikator do nowych danych.

afun=function(x,y){
#run geocoder - not shown cause it needs a key
#pretend in this function I get data from the geocoder
OP=data.frame(id=y,lat=34.4,long=-86, county="Washington")
return(OP)
}

jak używać polecenia ddply w celu zastosowania tej funkcji do ramki danych i zwrócenia wyniku jako ramki danych? Próbowałem coś takiego:

ddply(df,1,afun,id=id)

Pomysły?

Odpowiedzi:

1 dla odpowiedzi № 1

Jestem trochę zdezorientowany dokładnie, dlaczego używasz tutaj ddply.Jednym rozwiązaniem, które widzę, jeśli rozumiem poprawnie jest użycie dplyr i mutować jak:

library(dplyr)
df %>% mutate(g=x+1,h=y+3) %>%
select(g,h)

Czuję, że musisz próbować coś zrobić z większym zbiorem danych, który ma zmienną grupującą wymagającą ddply. Nadal byłoby to również łatwe do osiągnięcia dzięki mutacji i dplyr.

HTH.


1 dla odpowiedzi nr 2

Odpowiedź jest bardzo prosta, użyj mdply:

mdply(select(df,x=loc,y=id),afun)

To pobiera dane.frame i wypluwa dane.frame.