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
fromtidyr
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