如何将合并应用于矩阵
How to apply coalesce to a matrix
我知道我可以用这种方式合并三个向量:
y <- c(1, NA, NA, NA, 5)
z <- c(NA, NA, 3, 4, 6)
k <- c(NA, 1, NA, NA, 8)
coalesce(y,z,k)
然而,在实际数据中,我只得到整个数据集,如:
d <- rbind(y,z,k)
在现实生活中,每次 d
都有不同的行长度(有时 3 行,有时 4 行),这意味着我们不能只写:
coalesce(d[1,],d[2,],d[3,])
我想过split
函数:
split(t(d),rep(1:nrow(d),each = ncol(d)))
并得到:
$`1`
[1] 1 NA NA NA 5
$`2`
[1] NA NA 3 4 6
$`3`
[1] NA 1 NA NA 8
但是 split
函数的结果不能应用于合并函数。
有没有办法实现我的想法?
您可以在 do.call()
内使用它,即
do.call(coalesce, as.data.frame(t(d)))
#[1] 1 1 3 4 5
我知道我可以用这种方式合并三个向量:
y <- c(1, NA, NA, NA, 5)
z <- c(NA, NA, 3, 4, 6)
k <- c(NA, 1, NA, NA, 8)
coalesce(y,z,k)
然而,在实际数据中,我只得到整个数据集,如:
d <- rbind(y,z,k)
在现实生活中,每次 d
都有不同的行长度(有时 3 行,有时 4 行),这意味着我们不能只写:
coalesce(d[1,],d[2,],d[3,])
我想过split
函数:
split(t(d),rep(1:nrow(d),each = ncol(d)))
并得到:
$`1`
[1] 1 NA NA NA 5
$`2`
[1] NA NA 3 4 6
$`3`
[1] NA 1 NA NA 8
但是 split
函数的结果不能应用于合并函数。
有没有办法实现我的想法?
您可以在 do.call()
内使用它,即
do.call(coalesce, as.data.frame(t(d)))
#[1] 1 1 3 4 5