R &引用;“崩溃”;将多个因素转换为单个字符变量

R &引用;“崩溃”;将多个因素转换为单个字符变量,r,R,我有几个不重叠的因子变量,希望将它们折叠成一个字符变量。例如,我有: tibble(var1 = factor(c(1,2,3,NA,NA,NA,NA,NA,NA)), var2 = factor(c(NA,NA,NA,4,5,6,NA,NA,NA)), var3 = factor(c(NA,NA,NA,NA,NA,NA,"seven","eight","nine"))) # A tibble:

我有几个不重叠的因子变量,希望将它们折叠成一个字符变量。例如,我有:

tibble(var1 = factor(c(1,2,3,NA,NA,NA,NA,NA,NA)),
          var2 = factor(c(NA,NA,NA,4,5,6,NA,NA,NA)),
          var3 = factor(c(NA,NA,NA,NA,NA,NA,"seven","eight","nine")))

# A tibble: 9 x 3
  var1  var2  var3 
  <fct> <fct> <fct>
1 1     NA    NA   
2 2     NA    NA   
3 3     NA    NA   
4 NA    4     NA   
5 NA    5     NA   
6 NA    6     NA   
7 NA    NA    seven
8 NA    NA    eight
9 NA    NA    nine 
tibble(var1=因子(c(1,2,3,NA,NA,NA,NA)),
var2=因子(c(NA,NA,NA,4,5,6,NA,NA,NA)),
var3=系数(c(NA,NA,NA,NA,NA,NA,“七”,“八”,“九”))
#一个tibble:9x3
var1 var2 var3
1纳纳
2 NA NA
3纳纳
4NA 4NA
5NA 5NA
6NA 6NA
七那七
八那八
9那那那9
我想生成var4:

    # A tibble: 9 x 4
  var1  var2  var3  var4 
  <fct> <fct> <fct> <chr>
1 1     NA    NA    1    
2 2     NA    NA    2    
3 3     NA    NA    3    
4 NA    4     NA    4    
5 NA    5     NA    5    
6 NA    6     NA    6    
7 NA    NA    seven seven
8 NA    NA    eight eight
9 NA    NA    nine  nine
#一个tible:9 x 4
var1 var2 var3 var4
1 NA NA 1
2钠钠钠2
3钠钠钠3
4Na4Na4
5NA 5NA 5
6NA 6NA 6
7娜娜7
8那那8那8
9那那那9

我们可以使用
合并

library(dplyr)
df1 %>%
    mutate(var4 = coalesce(!!! .))
    # // or use
    # mutate(var4 = purrr::reduce(., coalesce))
> setDT(df)[, var4 := do.call(fcoalesce, Map(as.charac .... [TRUNCATED]
   var1 var2  var3  var4
1:    1 <NA>  <NA>     1
2:    2 <NA>  <NA>     2
3:    3 <NA>  <NA>     3
4: <NA>    4  <NA>     4
5: <NA>    5  <NA>     5
6: <NA>    6  <NA>     6
7: <NA> <NA> seven seven
8: <NA> <NA> eight eight
9: <NA> <NA>  nine  nine
-输出

# A tibble: 9 x 4
#  var1  var2  var3  var4 
#  <fct> <fct> <fct> <fct>
#1 1     <NA>  <NA>  1    
#2 2     <NA>  <NA>  2    
#3 3     <NA>  <NA>  3    
#4 <NA>  4     <NA>  4    
#5 <NA>  5     <NA>  5    
#6 <NA>  6     <NA>  6    
#7 <NA>  <NA>  seven seven
#8 <NA>  <NA>  eight eight
#9 <NA>  <NA>  nine  nine 
#一个tible:9 x 4
#var1 var2 var3 var4
#     
#1 1         1    
#2 2         2    
#3 3         3    
#4   4       4    
#5   5       5    
#6   6       6    
#七七
#八八八
#九九九

我们可以使用
unite
from
tidyr

df %>% 
  unite(var4, var1:var3, remove = F,  na.rm = TRUE) %>% 
  select(var1, var2, var3, var4)
输出:

  var1  var2  var3  var4 
  <fct> <fct> <fct> <chr>
1 1     NA    NA    1    
2 2     NA    NA    2    
3 3     NA    NA    3    
4 NA    4     NA    4    
5 NA    5     NA    5    
6 NA    6     NA    6    
7 NA    NA    seven seven
8 NA    NA    eight eight
9 NA    NA    nine  nine 
var1 var2 var3 var4
1 NA NA 1
2钠钠钠2
3钠钠钠3
4Na4Na4
5NA 5NA 5
6NA 6NA 6
7娜娜7
8那那8那8
9那那那9

也许这对你有帮助

df$var4 <- na.omit(unlist(df))
> setDT(df)[, var4 := do.call(fcoalesce, Map(as.charac .... [TRUNCATED]
   var1 var2  var3  var4
1:    1 <NA>  <NA>     1
2:    2 <NA>  <NA>     2
3:    3 <NA>  <NA>     3
4: <NA>    4  <NA>     4
5: <NA>    5  <NA>     5
6: <NA>    6  <NA>     6
7: <NA> <NA> seven seven
8: <NA> <NA> eight eight
9: <NA> <NA>  nine  nine