连接两个不同长度的数据帧

时间:2014-07-10 10:25:03

标签: r dataframe

我有一个数据框,有25周的销售数据。我计算了滞后移动平均线。现在,说出x <- c(1,2,3,4)和移动平均线y <- c(Nan,1,1.5,2,2.5)

如果我使用z <- data.frame(x,y),则因为尺寸不匹配而给我错误。有没有办法通过在x列的末尾插入NA值将它们作为数据帧加入? &#39;

当x是一个有n行,m列的数据框时,同样的事情是可能的吗?我想在它的右边追加一个长度为(m + 1)的列?

3 个答案:

答案 0 :(得分:4)

另一种方法

 data.frame(x[1:length(y)], y)

如果x是数据框,则可以使用

data.frame(x[1:length(y), ], y)

答案 1 :(得分:1)

你可以这样做

> lst <- list(x = x, y = y)
> m <- max(sapply(lst, length))
> as.data.frame(lapply(lst, function(x){ length(x) <- m; x }))
#     x   y
# 1   1 NaN
# 2   2 1.0
# 3   3 1.5
# 4   4 2.0
# 5  NA 2.5

在回复您的评论时,如果x是一个矩阵且y是一个向量,则取决于x中的列数。但是对于这个例子

cbind(append(x, rep(NA, length(y)-length(x))), y)

如果x有多列,您可以使用各种

apply(x, 2, append, NA)

但同样,这取决于列中的内容以及y

中的内容

答案 2 :(得分:1)

可能这也有帮助:

x<- 1:4
x1 <- matrix(1:8,ncol=2)
y <- c(NaN,1,1.5,2,2.5)


do.call(`merge`, c(list(x,y),by=0,all=TRUE))[,-1]
#    x   y
#  1  1 NaN
#  2  2 1.0
#  3  3 1.5
#  4  4 2.0
#  5 NA 2.5

do.call(`merge`, c(list(x1,y),by=0,all=TRUE))[,-1]
 # V1 V2   y
#1  1  5 NaN
#2  2  6 1.0
#3  3  7 1.5
#4  4  8 2.0
#5 NA NA 2.5