Czy istnieje metoda r dplyr dla merge with all = TRUE?
Mam dwa ramki danych R, które chcę połączyć. W prostym R można zrobić:
cost <- data.frame(farm=c('farm A', 'office'), cost=c(10, 100))
trees <- data.frame(farm=c('farm A', 'farm B'), trees=c(20,30))
merge(cost, trees, all=TRUE)
Który daje:
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Używam dplyr
i wolałabym rozwiązanie takie jak:
left_join(cost, trees)
Który produkuje coś zbliżonego do tego, czego chcę:
farm cost trees
1 farm A 10 20
2 office 100 NA
W dplyr
widzęleft_join
, inner_join
, semi_join
i anti-join
, ale żaden z nich nie robi tego, co merge
z all=TRUE
robi.
Również - czy istnieje szybki sposób, aby ustawić NAs na 0? Moje dotychczasowe wysiłki przy użyciu x$trees[is.na(x$trees)] <- 0;
są pracochłonne (potrzebuję polecenia na kolumnę) i nie zawsze wydają się działać.
Dzięki
32
Author: Racing Tadpole, 2014-02-18
2 answers
Najnowsza wersja dplyr
(0.4.0) ma teraz opcję full_join, która jest tym, co wierzę, że chcesz.
cost <- data.frame(farm=c('farm A', 'office'), cost=c(10, 100))
trees <- data.frame(farm=c('farm A', 'farm B'), trees=c(20,30))
merge(cost, trees, all=TRUE)
Zwraca
> merge(cost, trees, all=TRUE)
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
I
library(dplyr)
full_join(cost, trees)
Zwraca
> full_join(cost, trees)
Joining by: "farm"
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
Warning message:
joining factors with different levels, coercing to character vector
25
Author: Avraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-14 04:26:25
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-14 04:26:25
library(plyr)
> dat <- join(cost, trees, type = "full")
Joining by: farm
> dat
farm cost trees
1 farm A 10 20
2 office 100 NA
3 farm B NA 30
> dat[is.na(dat)] <- 0
> dat
farm cost trees
1 farm A 10 20
2 office 100 0
3 farm B 0 30
1
Author: Jiqing Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 08:39:07
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 08:39:07