如何一次性修改嵌套数据的每个数据集的所有列?

How to modify all the columns of each data set of a nested data in one go?

I have this nested data

我想取消嵌套,但我必须在取消嵌套之前对列的 类 进行标准化

`library(tidyverse`)

    nested_data<-iris %>% nest(data = !Species)


#I added to the third dataset an additionnal variable
nested_data$data[[3]]$randomVar<-round(rnorm(nrow(
  nested_data$data[[3]]),100,5),1)


#I dropped a column of the second dataset
nested_data$data[[2]]$Sepal.Length<-NULL

#I changed the type of certain variables

nested_data$data[[2]]$Petal.Length<- as.character(
  nested_data$data[[2]]$Petal.Length)

nested_data$data[[1]]$Petal.Width<-as.character(
  nested_data$data[[1]]$Petal.Width
)

使用不同类型的 类 某些变量我无法取消嵌套

nested_data%>%unnest(data)

我收到此错误消息:

Error: Can't combine `..1$Petal.Length` <double> and `..2$Petal.Length` <character>.
Run `rlang::last_error()` to see where the error occurred.

我想使用 for loop 或任何 vectorization 方法在一行代码中更改 character 三个数据集的所有变量。

我不知道该怎么做。

如果不小心列类型不同,那么可以在unnest

之前使用type.convert
library(dplyr)
library(tidyr)
library(purrr)
nested_data %>%
   mutate(data = type.convert(data, as.is = TRUE)) %>% 
   unnest(data)

-输出

# A tibble: 150 × 6
   Species Sepal.Length Sepal.Width Petal.Length Petal.Width randomVar
   <fct>          <dbl>       <dbl>        <dbl>       <dbl>     <dbl>
 1 setosa           5.1         3.5          1.4         0.2        NA
 2 setosa           4.9         3            1.4         0.2        NA
 3 setosa           4.7         3.2          1.3         0.2        NA
 4 setosa           4.6         3.1          1.5         0.2        NA
 5 setosa           5           3.6          1.4         0.2        NA
 6 setosa           5.4         3.9          1.7         0.4        NA
 7 setosa           4.6         3.4          1.4         0.3        NA
 8 setosa           5           3.4          1.5         0.2        NA
 9 setosa           4.4         2.9          1.4         0.2        NA
10 setosa           4.9         3.1          1.5         0.1        NA
# … with 140 more rows

或者如果 type.convert 不起作用(由于字符元素,则强制列为 characterunnest 类型,然后使用 type.convert

nested_data %>%
  mutate(data = map(data,~ 
   .x %>% 
    mutate(across(everything(), as.character)))) %>% 
  unnest(data) %>% 
  type.convert(as.is = TRUE)