首页 > 解决方案 > 在 data.frames 上进行 rbind,其中包含.. 2d“asis”对象

问题描述

给定两个尺寸相同且名称相同的 1-row data.frames

    dn1 <- structure(list(A = structure(list(V1 = 0, V2 = 0, V3 = 0, V4 = 0, 
        V5 = 0, V6 = 0, V7 = 0, V8 = -0.5, V9 = 0, V10 = -0.5), class = c("AsIs", 
    "data.frame"), row.names = 1L), B = structure(list(V1 = 0, V2 = 0, 
        V3 = 0, V4 = 0, V5 = 0, V6 = -0.5, V7 = 0, V8 = 0, V9 = 0, 
        V10 = 0, V11 = 0, V12 = 0, V13 = 0, V14 = 0, V15 = 0, V16 = 0, 
        V17 = 0, V18 = 0, V19 = 0, V20 = 0, V21 = 0, V22 = 0, V23 = 0, 
        V24 = 0, V25 = 0, V26 = 0, V27 = 0, V28 = 0, V29 = 0), class = c("AsIs", 
    "data.frame"), row.names = 1L)), class = "data.frame", row.names = c(NA, 
    -1L))

    dn2 <- structure(list(A = structure(list(V1 = 0, V2 = 0, V3 = 0, V4 = 0, 
        V5 = 0, V6 = 0, V7 = 0, V8 = 0, V9 = 0, V10 = 0), class = c("AsIs", 
    "data.frame"), row.names = 1L), B = structure(list(V1 = 0, V2 = 0, 
        V3 = 0, V4 = 0, V5 = 0, V6 = 0, V7 = 0, V8 = 0, V9 = 0, V10 = 0, 
        V11 = 0, V12 = 0, V13 = 0, V14 = -0.5, V15 = 0, V16 = 0, 
        V17 = 0, V18 = -0.5, V19 = 0, V20 = 0, V21 = 0, V22 = 0, 
        V23 = 0, V24 = 0, V25 = 0, V26 = 0, V27 = 0, V28 = 0, V29 = 0), class = c("AsIs", 
    "data.frame"), row.names = 1L)), class = "data.frame", row.names = c(NA, 
    -1L))

如果我rbind这两个,我得到一个错误:

    > rbind.data.frame( dn1, dn2 )
    Error in `.rowNamesDF<-`(x, value = value) : 
      duplicate 'row.names' are not allowed
    In addition: Warning message:
    non-unique value when setting 'row.names': ‘1’ 
    >

我怀疑它是由于其中的“A”和“B”结构,我可以rbind( dn1$A, dn2$A)等等,但是因为dn1和对于所有意图和目的dn2都是有效的 1 行data.frames,并且具有相同的名称和尺寸,所以我不应该感到奇怪能够对rbind他们。

标签: rdataframerbind

解决方案


我不知道实际原因,但我想这rbind不适用于像您这样复杂的数据框。我想出了一个尽可能实现你想要的方法。

> rbind.list <- mapply(rbind, dn1, dn2)
> dn3 <- data.frame(rbind.list)

> dn3$A

#   V1 V2 V3 V4 V5 V6 V7   V8 V9  V10
# 1  0  0  0  0  0  0  0 -0.5  0 -0.5
# 2  0  0  0  0  0  0  0  0.0  0  0.0

> dn3$B

#   V1 V2 V3 V4 V5   V6 V7 V8 V9 V10 V11 V12 V13  V14 V15 V16 V17  V18 V19 V20 V21
# 1  0  0  0  0  0 -0.5  0  0  0   0   0   0   0  0.0   0   0   0  0.0   0   0   0
# 2  0  0  0  0  0  0.0  0  0  0   0   0   0   0 -0.5   0   0   0 -0.5   0   0   0
#   V22 V23 V24 V25 V26 V27 V28 V29
# 1   0   0   0   0   0   0   0   0
# 2   0   0   0   0   0   0   0   0

mapply等效但比您分别使用的rbind( dn1$A, dn2$A)和更有效rbind( dn1$B, dn2$B)


推荐阅读