2016-04-03 40 views
1

verir purr::map kullanarak bir mutate_each kullanarak bir tablo tidyr::nest tarafından oluşturulan tablolar.tidyr iç içe geçmiş tablo üzerinde mutate_each "Bilinmeyen girişler"

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)))) 

verir:

Error: Unknown inputs

bu soruna neden olan nedir Aşağıda

Yapmak ne çalışıyorum bir örnektir ve ortaya çıkan hatadır? Bir düzeltme var mı? mutate_each yerine apply kullanabilir, ancak bu rownames kaldırır.

DÜZENLEME: İlk yanıttan anlaşıldığı gibi amaç açık değildi. Bu yüzden belki de yanlış bir şey yapmaya çalışıyorum. Açıklamama izin ver.

Bunu yaparsanız:

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

Şu ana kadar:

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 

Ne her sütun için bir işlev çalıştırılır istiyorum; ancak her iç içe geçmiş tablo için ayrı ayrı yapılır. Bu yüzden, her tablo altındaki equevalent çalıştırmak istiyorum:

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

verilmesi:

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

Neyi başarmaya çalışıyorsunuz? Belki de "gapminder" veri çerçevesini beklenen çıktı olarak gösterir misiniz? – Gopala

+0

Tamam. Soru güncellendi. –

+0

Neden bunu yapmayın: 'gapminder%>% mutate_each_ (funs (as.numeric), isimler (gapminder) [sapply (gapminder, is.integer)])%>% group_by (ülke, kıta)%>% nest() '? – Gopala

cevap

2

map işlev değişkeni, bir formül olarak verildiğinde giriş referans veri .x kullanır.

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

veya

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

O mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric)))) da çalışması gerektiğini görünüyor ama öyle değil: o değişiklikten sonra, orada mutate_each şeklinde için iki ihtimal vardır.

+0

Harika! Çok teşekkürler. –

İlgili konular