rbind 命名向量到不同长度的矩阵
rbind named vector to matrix with different lengths
我正在尝试将一个命名向量绑定到一个矩阵上。命名向量的长度与矩阵不同:
> m <- matrix(data = c("1", "2", "3"),
nrow = 1, ncol = 3,
dimnames = list(c(),
c("column 1", "column 2", "column 3")))
> named_vec <- c("4", "5")
> names(named_vec) <- c("column 1", "column 2")
> rbind(m, named_vec)
我得到以下信息:
Warning message:
In rbind(m, named_vec) :
number of columns of result is not a multiple of vector length (arg 2)
这会产生重复较短向量的不良影响。
此外,plyr 的 rbind.fill 函数在这里不起作用,因为两个参数都需要是数据帧:
> plyr::rbind.fill(data.frame(m), data.frame(named_vec))
Error: All inputs to rbind.fill must be data.frames
我想要的输出是一个用 NA 填充缺失值而不是重复向量的矩阵,如下所示:
column 1 column 2 column 3
[1,] "1" "2" "3"
[2,] "4" "5" NA
如果可以将矩阵转换为dataframe,可以使用bind_rows
。
dplyr::bind_rows(data.frame(m), data.frame(t(named_vec)))
# column.1 column.2 column.3
#1 1 2 3
#2 4 5 <NA>
下面是基本的 R 解决方案
do.call(rbind,lapply(u<-list(m,named_vec),`length<-`,max(lengths(u))))
这样
column 1 column 2 column 3
[1,] "1" "2" "3"
[2,] "4" "5" NA
我们可以使用rbindlist
library(data.table)
rbindlist(list(as.data.frame(m), as.data.frame(t(named_vec))), fill = TRUE)
我正在尝试将一个命名向量绑定到一个矩阵上。命名向量的长度与矩阵不同:
> m <- matrix(data = c("1", "2", "3"),
nrow = 1, ncol = 3,
dimnames = list(c(),
c("column 1", "column 2", "column 3")))
> named_vec <- c("4", "5")
> names(named_vec) <- c("column 1", "column 2")
> rbind(m, named_vec)
我得到以下信息:
Warning message:
In rbind(m, named_vec) :
number of columns of result is not a multiple of vector length (arg 2)
这会产生重复较短向量的不良影响。
此外,plyr 的 rbind.fill 函数在这里不起作用,因为两个参数都需要是数据帧:
> plyr::rbind.fill(data.frame(m), data.frame(named_vec))
Error: All inputs to rbind.fill must be data.frames
我想要的输出是一个用 NA 填充缺失值而不是重复向量的矩阵,如下所示:
column 1 column 2 column 3
[1,] "1" "2" "3"
[2,] "4" "5" NA
如果可以将矩阵转换为dataframe,可以使用bind_rows
。
dplyr::bind_rows(data.frame(m), data.frame(t(named_vec)))
# column.1 column.2 column.3
#1 1 2 3
#2 4 5 <NA>
下面是基本的 R 解决方案
do.call(rbind,lapply(u<-list(m,named_vec),`length<-`,max(lengths(u))))
这样
column 1 column 2 column 3
[1,] "1" "2" "3"
[2,] "4" "5" NA
我们可以使用rbindlist
library(data.table)
rbindlist(list(as.data.frame(m), as.data.frame(t(named_vec))), fill = TRUE)