2016-04-03 4 views
1

Ich versuche, eine mutate_each mit purr::map für eine Gruppe von Tabellen erstellt von tidyr::nest.muate_each auf tidyr geschachtelte Tabelle gibt "Unbekannte Eingaben"

Unten ist ein Beispiel dafür, was ich versuche zu tun, und der resultierende Fehler:

library(tidyr) 
library(gapminder) 
library(dplyr) 
library(purrr) 


by_country <- gapminder %>% 
    group_by(continent, country) %>% 
    nest() %>% 
    mutate(data2 = map(data, ~ mutate_each(.,funs(as.numeric)))) 

gibt: dieses Problem

Error: Unknown inputs

Was ist die Ursache? Gibt es eine Lösung? Ich könnte apply anstelle von mutate_each verwenden, aber das entfernt rownames.

EDIT: Von der ersten Antwort scheint es der Zweck war nicht klar. Vielleicht versuche ich etwas falsch zu machen. Lassen Sie mich erklären.

Wenn Sie das tun:

by_country <- gapminder %>% 
    group_by(continent, country) %>% 
    nest() 

Sie haben:

by_country$data[[1]] 
Source: local data frame [12 x 4] 

    year lifeExp  pop gdpPercap 
    (int) (dbl) (int)  (dbl) 
1 1952 28.801 8425333 779.4453 
2 1957 30.332 9240934 820.8530 
3 1962 31.997 10267083 853.1007 
4 1967 34.020 11537966 836.1971 
5 1972 36.088 13079460 739.9811 
6 1977 38.438 14880372 786.1134 
7 1982 39.854 12881816 978.0114 
8 1987 40.822 13867957 852.3959 
9 1992 41.674 16317921 649.3414 
10 1997 41.763 22227415 635.3414 
11 2002 42.129 25268405 726.7341 
12 2007 43.828 31889923 974.5803 

Was würde Ich mag laufen wird eine Funktion für jede Spalte; aber separat für jede geschachtelte Tabelle. So würde Ich mag das equevalent der unten auf jeden Tisch laufen:

mutate_each(by_country$data[[1]],funs(as.numeric)) 

Giving:

Source: local data frame [12 x 4] 

    year lifeExp  pop gdpPercap 
    (dbl) (dbl) (dbl)  (dbl) 
1 1952 28.801 8425333 779.4453 
2 1957 30.332 9240934 820.8530 
3 1962 31.997 10267083 853.1007 
4 1967 34.020 11537966 836.1971 
5 1972 36.088 13079460 739.9811 
6 1977 38.438 14880372 786.1134 
7 1982 39.854 12881816 978.0114 
8 1987 40.822 13867957 852.3959 
9 1992 41.674 16317921 649.3414 
10 1997 41.763 22227415 635.3414 
11 2002 42.129 25268405 726.7341 
12 2007 43.828 31889923 974.5803 
+1

Was versuchen Sie zu erreichen? Zeigen Sie möglicherweise die erwartete Ausgabe, wenn der Datenrahmen 'gapminder' als Eingabe verwendet wird? – Gopala

+0

OK. Die Frage wurde aktualisiert. –

+0

Warum nicht: 'gapminder%>% mutate_each_ (Spaß (as.numeric), Namen (gapminder) [sapply (gapminder, is.integer)])%>% group_by (Land, Kontinent)%>% nest() '? – Gopala

Antwort

2

map verwendet .x die Eingangsdaten zu verweisen, wenn das Funktionsargument als Formel angegeben wird. Nach dieser Änderung gibt es zwei Möglichkeiten für die Form mutate_each:

by_country <- gapminder %>% 
    group_by(continent, country) %>% 
    nest() %>% 
    mutate(data2 = map(data, ~ mutate_each(.x, "as.numeric"))) 

oder

by_country2 <- gapminder %>% 
    group_by(continent, country) %>% 
    nest() %>% 
    mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric(.))))) 

Es scheint, dass mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric)))) auch funktionieren sollte, aber es funktioniert nicht.

+0

Großartig! Vielen Dank. –

Verwandte Themen