【发布时间】:2021-01-17 14:11:08
【问题描述】:
我想从嵌套 tibble 的每个数据框中删除不完整的案例。 我确实尝试使用 map 函数(purrr 包),但收到以下错误消息“parent.env(x) 中的错误:参数不是环境”。我不明白这是什么问题。
这是一个可复制的例子。
library(tidyverse)
gapminder_orig <- read.csv("https://raw.githubusercontent.com/swcarpentry/r-novice-gapminder/gh-pages/_episodes_rmd/data/gapminder-FiveYearData.csv")
gapminder_orig <- gapminder_orig %>%
dplyr::select(continent, country, year, pop, lifeExp, gdpPercap)
data_with_NA<-map_df(gapminder_orig[,4:6], function(x) {x[sample(c(TRUE, NA), prob = c(0.8, 0.2), size = length(x), replace = TRUE)]})
gapminder_orig_with_NA<-gapminder_orig %>%
mutate(pop=data_with_NA$pop, lifeExp=data_with_NA$lifeExp, gdpPercap=data_with_NA$gdpPercap)
gapminder_nested <- gapminder_orig_with_NA %>%
mutate(dummy_var= sample(1:3, nrow(gapminder_orig_with_NA), replace=TRUE)) %>%
group_by(continent) %>%
nest() %>%
add_column(Type=c("Full", "Full", "Subset","Subset","Subset")) %>%
add_column(Sector=c("Agriculture", "Banking", "Agriculture", "Banking", "Agriculture"))
gapminder_nested
remove_NA<-function(x) {
y <- x[complete.cases(x),]
return(y)
}
remove_NAz<-function(x, z) {
y <- x[complete.cases(x),]
return(y)
}
test<-gapminder_nested %>%
#mutate(data2 = map(.x=data, .f=filter(complete.cases(.x)))) #Does not work
#mutate(data2 = map(.x=data, .f=na.omit)) #Does not work
#mutate(data2 = map(data, ~ map_dfc(., na.omit))) #Does not work
#mutate(data2 = map(data, function(.x) remove_NA(.x))) #Does not work
mutate(data2= map2(data, Type, function(.x, .z) remove_NAz(.x, .z))) #Work but not elegant
知道调用 map 函数出了什么问题吗? 为什么它适用于 map2?
谢谢!
【问题讨论】: