下面有一个列表,我不想做的是更改 df2
中的 class(Category)
。代码应该更改类(类别)并在 list()
对象中为其分配类别。如何解决这个问题?非常感谢。
df1 <- data_frame(ID = paste0(LETTERS[1],1:4), valueA = seq(0.1,0.4,0.1), Category= "Apples" )
df2 <- data_frame(ID = paste0(LETTERS[1],5:8), valueB = seq(0.1,0.4,0.1), Category= seq(0.1,0.4,0.1))
df3 <- data_frame(ID = paste0(LETTERS[1],9:12), valueC = seq(0.1,0.4,0.1), Category= "Apples3")
list1 <- list(df1, df2, df3);list1
bind_rows(list1)
Error in `bind_rows()`:
! Can't combine `..1$Category` <character> and `..2$Category` <double>.
Run `rlang::last_trace()` to see where the error occurred.
最佳答案
我们可以将所有列转换为字符
,然后使用type.convert
自动更改类型
library(purrr)
library(dplyr)
map_dfr(list1, ~ .x %>%
mutate(across(everything(), as.character))) %>%
type.convert(as.is= TRUE)
-输出
# A tibble: 12 × 5
ID valueA Category valueB valueC
<chr> <dbl> <chr> <dbl> <dbl>
1 A1 0.1 Apples NA NA
2 A2 0.2 Apples NA NA
3 A3 0.3 Apples NA NA
4 A4 0.4 Apples NA NA
5 A5 NA 0.1 0.1 NA
6 A6 NA 0.2 0.2 NA
7 A7 NA 0.3 0.3 NA
8 A8 NA 0.4 0.4 NA
9 A9 NA Apples3 NA 0.1
10 A10 NA Apples3 NA 0.2
11 A11 NA Apples3 NA 0.3
12 A12 NA Apples3 NA 0.4
或者我们可以嵌套
它
map_dfr(list1, ~ .x %>% nest(data = Category))
-输出
# A tibble: 12 × 5
ID valueA data valueB valueC
<chr> <dbl> <list> <dbl> <dbl>
1 A1 0.1 <tibble [1 × 1]> NA NA
2 A2 0.2 <tibble [1 × 1]> NA NA
3 A3 0.3 <tibble [1 × 1]> NA NA
4 A4 0.4 <tibble [1 × 1]> NA NA
5 A5 NA <tibble [1 × 1]> 0.1 NA
6 A6 NA <tibble [1 × 1]> 0.2 NA
7 A7 NA <tibble [1 × 1]> 0.3 NA
8 A8 NA <tibble [1 × 1]> 0.4 NA
9 A9 NA <tibble [1 × 1]> NA 0.1
10 A10 NA <tibble [1 × 1]> NA 0.2
11 A11 NA <tibble [1 × 1]> NA 0.3
12 A12 NA <tibble [1 × 1]> NA 0.4
关于r - 列表中的 bind_rows 即使 class() 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76179536/