我们可以使用type.convert()
说明:OP评论后:
type_convert
不考虑ds_a
(你可以检查一下是否比较glimpse(ds_a)
with glimpse
结果数据帧的:
请注意以下各列ds_a
具有与中相同的类result
.
> # compare classes
> glimpse(ds_a)
Rows: 6
Columns: 4
$ x <int> 1, 2, 3, 4, 5, 6
$ y <dbl> 5, 5, 5, 5, 5, 5
$ z <chr> "4", "4", "4", "4", "4", "4"
$ l <dbl> 2, 2, 2, 2, 2, 2
> glimpse(ds_b)
Rows: 6
Columns: 3
$ x <fct> 1, 2, 3, 4, 5, 6
$ y <chr> "5", "5", "5", "5", "5", "5"
$ p <dbl> 2, 2, 2, 2, 2, 2
> glimpse(result)
Rows: 12
Columns: 5
$ x <int> 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6
$ y <dbl> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
$ z <chr> "4", "4", "4", "4", "4", "4", NA, NA, NA, NA, NA, NA
$ l <dbl> 2, 2, 2, 2, 2, 2, NA, NA, NA, NA, NA, NA
$ p <int> NA, NA, NA, NA, NA, NA, 2, 2, 2, 2, 2, 2
What type.convert
所做的是:
- 将最佳拟合类应用于数据
ds_b
(注意 %>% 位于bind_rows
)。所以所有的ds_b$x
是整数,因此 R 将类因子转换为 ds_b$x 中的类整数。
- All of
ds_b$y
是字符类,但本质上是整数,因此 R 将字符类转换为整数类。这可能会导致误解。但是,现在我们有ds_a$y
双级和ds_b$y
整数类 -> 但这对于 R 和 来说没有问题bind_rows
这里双类覆盖整数。
> # showing what type.convert does to ds_b
> ds_b$x <- as.integer(ds_b$x)
> ds_b$y <- as.integer(ds_b$y)
> ds_b %>%
+ as_tibble()
# A tibble: 6 x 3
x y p
<int> <int> <dbl>
1 1 5 2
2 2 5 2
3 3 5 2
4 4 5 2
5 5 5 2
6 6 5 2
> ds_b %>%
+ as_tibble()
# A tibble: 6 x 3
x y p
<int> <int> <dbl>
1 1 5 2
2 2 5 2
3 3 5 2
4 4 5 2
5 5 5 2
6 6 5 2
> bind_rows(ds_a, ds_b) %>%
+ as_tibble()
# A tibble: 12 x 5
x y z l p
<int> <dbl> <chr> <dbl> <dbl>
1 1 5 4 2 NA
2 2 5 4 2 NA
3 3 5 4 2 NA
4 4 5 4 2 NA
5 5 5 4 2 NA
6 6 5 4 2 NA
7 1 5 NA NA 2
8 2 5 NA NA 2
9 3 5 NA NA 2
10 4 5 NA NA 2
11 5 5 NA NA 2
12 6 5 NA NA 2
- 皈依者
ds_b$p
这是 double 类到整型的类型,因为数据本质上是整数。
解决方案:
library(dplyr)
bind_rows(ds_a, ds_b %>% type.convert(as.is=TRUE))
output:
x y z l p
1 1 5 4 2 NA
2 2 5 4 2 NA
3 3 5 4 2 NA
4 4 5 4 2 NA
5 5 5 4 2 NA
6 6 5 4 2 NA
7 1 5 <NA> NA 2
8 2 5 <NA> NA 2
9 3 5 <NA> NA 2
10 4 5 <NA> NA 2
11 5 5 <NA> NA 2
12 6 5 <NA> NA 2