mutate_each 在 tidyr 上嵌套 table 给出 "Unknown inputs"
mutate_each on tidyr nested table gives "Unknown inputs"
我正在尝试使用 purr::map
对 tidyr::nest
创建的一组 table 进行 mutate_each
。
下面是我正在尝试执行的操作以及产生的错误的示例:
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))))
给出:
Error: Unknown inputs
是什么导致了这个问题?有解决办法吗?我可以使用 apply
而不是 mutate_each
但这会删除行名。
编辑: 从第一个响应来看,目的似乎并不明确。所以也许我正在尝试以错误的方式做某事。让我解释一下。
如果你这样做:
by_country <- gapminder %>%
group_by(continent, country) %>%
nest()
您有:
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
我想要的是 运行 每列一个函数;但对每个嵌套 table 单独完成。所以我想 运行 每个 table:
下面的等价物
mutate_each(by_country$data[[1]],funs(as.numeric))
给予:
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
当函数参数作为公式给出时,map
使用 .x
引用输入数据。改完之后,mutate_each
的形式有两种可能:
by_country <- gapminder %>%
group_by(continent, country) %>%
nest() %>%
mutate(data2 = map(data, ~ mutate_each(.x, "as.numeric")))
或
by_country2 <- gapminder %>%
group_by(continent, country) %>%
nest() %>%
mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric(.)))))
似乎 mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric))))
也应该有效,但它没有。
我正在尝试使用 purr::map
对 tidyr::nest
创建的一组 table 进行 mutate_each
。
下面是我正在尝试执行的操作以及产生的错误的示例:
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))))
给出:
Error: Unknown inputs
是什么导致了这个问题?有解决办法吗?我可以使用 apply
而不是 mutate_each
但这会删除行名。
编辑: 从第一个响应来看,目的似乎并不明确。所以也许我正在尝试以错误的方式做某事。让我解释一下。
如果你这样做:
by_country <- gapminder %>%
group_by(continent, country) %>%
nest()
您有:
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
我想要的是 运行 每列一个函数;但对每个嵌套 table 单独完成。所以我想 运行 每个 table:
下面的等价物mutate_each(by_country$data[[1]],funs(as.numeric))
给予:
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
map
使用 .x
引用输入数据。改完之后,mutate_each
的形式有两种可能:
by_country <- gapminder %>%
group_by(continent, country) %>%
nest() %>%
mutate(data2 = map(data, ~ mutate_each(.x, "as.numeric")))
或
by_country2 <- gapminder %>%
group_by(continent, country) %>%
nest() %>%
mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric(.)))))
似乎 mutate(data2 = map(data, ~ mutate_each(.x, funs(as.numeric))))
也应该有效,但它没有。