我有一個有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)時,可能是同一件事嗎?
我有一個有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)時,可能是同一件事嗎?
另一個什麼這樣做的方法
data.frame(x[1:length(y)], y)
如果x
是數據幀時,可以使用
data.frame(x[1:length(y), ], y)
你能做到這一點
> 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
如何進行,如果x是一個矩陣,y是一個向量(列)和相同的問題那裏 ? – user3815746
可能這也有助於:
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
不錯。這對我來說是新聞。 –
+1爲緊湊的代碼。但是,如果x是具有多列的「矩陣」,則需要修改 – akrun
謝謝@akrun,我錯過了OP的最後一位。 – konvas