rbind на data.frames, который содержит .. 2d объекты "asis" в них - PullRequest
0 голосов
/ 22 октября 2018

Учитывая два одинаково измеренных и одинаково названных 1-строки 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 их.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

bind_rows из библиотеки dplyr является более надежным и дает некоторые подсказки.

rbind_rows(dn1, dn2) Error in bind_rows_(x, .id) : Argument 1 can't be a list containing data frames

dn1 - это список двух по-разному структурированных фреймов данных - не фрейм данных.Аналогично для дн2.

0 голосов
/ 22 октября 2018

Я не знаю фактическую причину, но я думаю, что 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) соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...