合并具有相同列数的数据框

3

我的第一个数据框(一个大的样本)有10行和13列。第二个数据框有4行和13列(除了Month之外,全部是NA)。

当我尝试使用rbind将它们绑定在一起时,会出现以下错误:

Error in rbind(deparse.level, ...) : replacement has length zero

我无法弄清楚问题所在,因为它们都有相同的列名。

dput:

    dput(sample.df)
structure(list(Month = structure(c(8674, 8552, 8401, 8491, 8521, 
8460, 8644, 8432, 8705, 8582), class = "Date"), Intention_CDU = c(211L, 
240L, 246L, 232L, 261L, 222L, 234L, 223L, 249L, 241L), Intention_SPD = structure(list(
    Intention_SPD = c(296L, 290L, 304L, 274L, 238L, 276L, 284L, 
    323L, 324L, 291L)), .Names = "Intention_SPD", row.names = c(9L, 
6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), 
    Intention_FDP = structure(list(Intention_FDP = c(40L, 50L, 
    47L, 36L, 35L, 46L, 33L, 44L, 33L, 31L)), .Names = "Intention_FDP", row.names = c(9L, 
    6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), 
    Intention_Green = structure(list(Intention_Green = c(97L, 
    93L, 112L, 97L, 92L, 108L, 131L, 90L, 100L, 80L)), .Names = "Intention_Green", row.names = c(9L, 
    6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), 
    Intention_PDS = structure(list(Intention_PDS = c(1L, 4L, 
    1L, 4L, 2L, 1L, 3L, 2L, 1L, 6L)), .Names = "Intention_PDS", row.names = c(9L, 
    6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), 
    Intention_Right = structure(list(Intention_Right = c(39L, 
    26L, 40L, 44L, 48L, 51L, 33L, 45L, 27L, 30L)), .Names = "Intention_Right", row.names = c(9L, 
    6L, 1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame"), 
    CDU_scalometer = c(5.67605633802817, 5.8090241343127, 5.65452755905512, 
    5.79253112033195, 6.15352260778128, 5.61145194274029, 5.86511156186613, 
    5.56134969325153, 5.82591093117409, 5.78158458244111), CSU_scalometer = c(5.26910994764398, 
    5.2734375, 5.22417355371901, 5.16648411829135, 5.48986486486486, 
    5.05206073752711, 5.55080213903743, 5.07593582887701, 5.29957805907173, 
    5.35327963176064), FDP_scalometer = c(5.66122448979592, 5.66666666666667, 
    5.32698094282849, 5.32563025210084, 5.75965665236051, 5.51706308169597, 
    5.36663233779609, 5.73606729758149, 5.33991683991684, 5.67868852459016
    ), PDS_scalometer = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
    ), Grüne_scalmeter = c(6.2864476386037, 5.687432867884, 
    5.814, 6.00941422594142, 5.82429501084599, 6.2239263803681, 
    6.42443064182195, 6.128125, 5.90476190476191, 5.72203765227021
    ), SPD_scalometer = c(7.13104838709677, 6.60669456066946, 
    6.7509842519685, 6.53478712357217, 6.33019853709509, 6.37307297019527, 
    7.16818642350557, 7.09304703476483, 6.94939271255061, 6.7258064516129
    )), .Names = c("Month", "Intention_CDU", "Intention_SPD", 
"Intention_FDP", "Intention_Green", "Intention_PDS", "Intention_Right", 
"CDU_scalometer", "CSU_scalometer", "FDP_scalometer", "PDS_scalometer", 
"Grüne_scalmeter", "SPD_scalometer"), row.names = c(9L, 6L, 
1L, 4L, 5L, 3L, 8L, 2L, 10L, 7L), class = "data.frame")

.

dput(data1)
structure(list(Month = structure(c(8613, 9343, 9678, 10043), class = "Date"), 
    Intention_CDU = c(NA, NA, NA, NA), Intention_SPD = c(NA, 
    NA, NA, NA), Intention_FDP = c(NA, NA, NA, NA), Intention_Green = c(NA, 
    NA, NA, NA), Intention_PDS = c(NA, NA, NA, NA), Intention_Right = c(NA, 
    NA, NA, NA), CDU_scalometer = c(NA, NA, NA, NA), CSU_scalometer = c(NA, 
    NA, NA, NA), FDP_scalometer = c(NA, NA, NA, NA), PDS_scalometer = c(NA, 
    NA, NA, NA), Grüne_scalmeter = c(NA, NA, NA, NA), SPD_scalometer = c(NA, 
    NA, NA, NA)), .Names = c("Month", "Intention_CDU", "Intention_SPD", 
"Intention_FDP", "Intention_Green", "Intention_PDS", "Intention_Right", 
"CDU_scalometer", "CSU_scalometer", "FDP_scalometer", "PDS_scalometer", 
"Grüne_scalmeter", "SPD_scalometer"), row.names = c(NA, -4L), class = "data.frame")

2
你用了什么代码来合并你的数据? - Heroka
@Heroka df1 <- rbind(sample.df, data1) 意思是将数据框data1添加到数据框sample.df的末尾,并将结果存储在新的数据框df1中。 - Zlo
请逐行和逐列减少您的数据,直到达到最小的情况,并且仍然显示错误。如果幸运的话,您会自己找到问题所在,如果不行,则可以给其他人提供一个干净的问题进行分类。 - Alex Brown
1
你的数据框中包含了数据框,我认为这是导致问题的原因。 - Heroka
1个回答

5
问题在于您的sample.df中有几列是数据框本身。例如:

(译者注:这里的“本身”即指这些列的元素是数据框,而不是简单的数值或字符串等)

class(sample.df$Intention_SPD)
# "data.frame"

data1中的所有列都是原子向量。要解决这个问题,您可以使用do.call(data.frame, sample.df)sample.df的所有列转换为向量。因此,以下操作可行:

rbind(do.call(data.frame, sample.df), data1)

谢谢,这非常有帮助! - Zlo
我认为 rbind(do.call(data.frame, sample.df), data1) 在这里是正确的调用方式。虽然它们都可以工作。 - Pierre L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接