【发布时间】:2020-08-07 11:18:17
【问题描述】:
我想绑定行。但是,data.frames 的少数列具有不同的属性。像df1$caseid 和df1$v001 具有与df2$caseid 和df2$v001 不同的属性。想知道如何才能在那里绑定 data.frames。
library(tidyverse)
library(tidytable)
#>
#> Attaching package: 'tidytable'
#> The following object is masked from 'package:stats':
#>
#> dt
df1 <-
structure(list(caseid = structure(c(" 11 1 1 1 2", " 11 1 1 1 2",
" 11 1 1 1 2", " 11 1 1 1 2", " 11 1 1 1 2", " 11 1 1 2 2"
), label = "case identification", class = c("labelled", "character"
), format = "%15s"), bidx = structure(c(1L, 2L, 3L, 4L, 5L, 1L
), label = "birth column number", class = c("labelled", "integer"
), format = "%8.0g"), v000 = structure(c("PK2", "PK2", "PK2",
"PK2", "PK2", "PK2"), label = "country code and phase", class = c("labelled",
"character"), format = "%3s"), v001 = structure(c(1101001L, 1101001L,
1101001L, 1101001L, 1101001L, 1101001L), label = "cluster number", class = c("labelled",
"integer"), format = "%12.0g"), v002 = structure(c(1L, 1L, 1L,
1L, 1L, 2L), label = "household number", class = c("labelled",
"integer"), format = "%8.0g")), row.names = c(NA, -6L), class = "data.frame")
df2 <-
structure(list(caseid = structure(c(1L, 1L, 1L, 1L, 1L, 2L), .Label = c(" 1 1 2",
" 1 4 1"), class = "factor"), bidx = structure(c(1L,
2L, 3L, 4L, 5L, 1L), label = c(BIDX = "Birth column number"), class = c("labelled",
"numeric")), v000 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "PK7", class = "factor"),
v001 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), label = c(V001 = "Cluster number"), class = c("labelled",
"numeric")), v002 = structure(c(1L, 1L, 1L, 1L, 1L, 4L), label = c(V002 = "Household number"), class = c("labelled",
"numeric"))), row.names = c(NA, -6L), class = "data.frame")
rbind(df1, df2)
#> caseid bidx v000 v001 v002
#> 1 11 1 1 1 2 1 PK2 1101001 1
#> 2 11 1 1 1 2 2 PK2 1101001 1
#> 3 11 1 1 1 2 3 PK2 1101001 1
#> 4 11 1 1 1 2 4 PK2 1101001 1
#> 5 11 1 1 1 2 5 PK2 1101001 1
#> 6 11 1 1 2 2 1 PK2 1101001 2
#> 7 1 1 2 1 PK7 1 1
#> 8 1 1 2 2 PK7 1 1
#> 9 1 1 2 3 PK7 1 1
#> 10 1 1 2 4 PK7 1 1
#> 11 1 1 2 5 PK7 1 1
#> 12 1 4 1 1 PK7 1 4
bind_rows(df1, df2)
#> Error: Can't combine `..1$caseid` <labelled> and `..2$caseid` <factor<da793>>.
bind_rows.(df1, df2)
#> Error in rbindlist(dots, idcol = .id, use.names = .use_names, fill = .fill): Class attribute on column 2 of item 2 does not match with column 2 of item 1.
【问题讨论】:
-
rbind对你有用,对吧?问题是什么? -
@RonakShah 是的
rbind适用于这些小型data.frames,但不适用于大型数据集。同样来自tidyverse的bind_rows和来自tidytable的bind_rows.即使对于这些小的data.frames也不起作用。所以寻找一种有效的方法。 -
rbind会发生什么?它会给出错误(它是什么?)还是很慢?当班级不同时,bind_rows将不起作用。它总是会报错。 -
@RonakShah:使用我的实际数据集
rbind会抛出以下错误消息Error in rbindlist(l, use.names, fill, idcol) : Class attribute on column 2 of item 2 does not match with column 2 of item 1。 -
试试
base::rbind