我有一个数据框,有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)的列?
答案 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