bind_rows 在 R 的列表中,尽管 class() 不同

问题描述 投票:0回答:1

我在下面列出了我不想做的是更改

class(Category)
中的
df2
。代码应该更改类(类别)并在
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)
r dplyr tidyr data-manipulation tidy
1个回答
0
投票

我们可以将所有列转换为

character
,然后使用
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
© www.soinside.com 2019 - 2024. All rights reserved.