2014-07-10 53 views
1

我有一個有25周銷售數據的數據框。我計算了一個滯後的移動平均線。現在,說x <- c(1,2,3,4)和移動平均線y <- c(Nan,1,1.5,2,2.5)加入兩個不同長度的數據幀

如果我使用z <- data.frame(x,y)它給我錯誤,因爲尺寸不匹配。通過在x列的末尾插入NA值,是否有任何方法將它們作爲數據框加入? '

當x是一個有n行,m列的數據框,並且我想在它的右邊添加一列長度(m + 1)時,可能是同一件事嗎?

回答

4

另一個什麼這樣做的方法

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

如果x是數據幀時,可以使用

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

不錯。這對我來說是新聞。 –

+0

+1爲緊湊的代碼。但是,如果x是具有多列的「矩陣」,則需要修改 – akrun

+0

謝謝@akrun,我錯過了OP的最後一位。 – konvas

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

+0

如何進行,如果x是一個矩陣,y是一個向量(列)和相同的問題那裏 ? – user3815746

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 
相關問題