为了账号安全,请及时绑定邮箱和手机立即绑定

合并(合并)不同长度的向量

/ 猿问

合并(合并)不同长度的向量

慕莱坞7535251 2019-11-14 15:27:58

我有几个长度不等的向量,我想要cbind它们。我将向量放入列表中,并尝试结合使用do.call(cbind, ...):


nm <- list(1:8, 3:8, 1:5)

do.call(cbind, nm)


#      [,1] [,2] [,3]

# [1,]    1    3    1

# [2,]    2    4    2

# [3,]    3    5    3

# [4,]    4    6    4

# [5,]    5    7    5

# [6,]    6    8    1

# [7,]    7    3    2

# [8,]    8    4    3

# Warning message:

#   In (function (..., deparse.level = 1)  :

#         number of rows of result is not a multiple of vector length (arg 2)

如预期的那样,所得矩阵中的行数是最长向量的长度,较短向量的值将被回收以弥补该长度。


相反,我想用NA值填充较短的向量,以获得与最长的向量相同的长度。我希望矩阵看起来像这样:


#      [,1] [,2] [,3]

# [1,]    1    3    1

# [2,]    2    4    2

# [3,]    3    5    3

# [4,]    4    6    4

# [5,]    5    7    5

# [6,]    6    8    NA

# [7,]    7    NA   NA

# [8,]    8    NA   NA

我该怎么做呢?


查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

在调用do.call之前,应使用NA填充向量。


nm <- list(1:8,3:8,1:5)


max_length <- max(unlist(lapply(nm,length)))

nm_filled <- lapply(nm,function(x) {ans <- rep(NA,length=max_length);

                                    ans[1:length(x)]<- x;

                                    return(ans)})

do.call(cbind,nm_filled)


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 276 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信