RBIND 数值向量 (R)

RBIND numeric vectors (R)

我在使用 rbind 连接一系列数值向量时遇到了一些问题。

假设我有:

List1Nums=c(600,500,400,300,200)
List2Nums=c(550,450,350)
List3Nums=c(275,375,475,575)
List4Nums=c(310,410,510,610)

List1=rep(1,length(List1Nums))
List2=rep(2,length(List2Nums))
List3=rep(3,length(List3Nums))
List4=rep(4,length(List4Nums))

我想使用 rbind() 加入 List#Nums 和 List# 系列,这样我的数据框看起来像:

Nums   List
600    1
500    1
400    1
300    1
200    1
550    2
450    2
…      ... 

我尝试使用:

 Nums=rbind(List1Nums,List2Nums,List3Nums,List4Nums)
 List=rbind(List1,List2,List3,List4)
 data=cbind(Nums,List)

我收到一条错误消息:

Warning message:
  number of columns of result is not a multiple of vector length (arg 2)

有人可以帮我指明正确的方向吗?

谢谢!

一个选项是 mget 获取 list 中所有 'ListdigitNums' 对象的值,并且 stack 将其设为两列 data.frame

lst1 <- mget(ls(pattern = "^List\d+Nums$"))
setNames(stack(setNames(lst1, seq_along(lst1))), c("Nums", "List"))
#   Nums List
#1   600    1
#2   500    1
#3   400    1
#4   300    1
#5   200    1
#6   550    2
#7   450    2
#8   350    2
#9   275    3
#10  375    3
#11  475    3
#12  575    3
#13  310    4
#14  410    4
#15  510    4
#16  610    4

这也可以写成

stack(mget(ls(pattern = "^List\d+Nums$"))) 

如果'List'值可以是对象名称


如果我们还需要使用List1List2等向量

 do.call(rbind, Map(cbind, mget(ls(pattern = "^List\d+Nums$")), 
          mget(paste0("List", 1:4))))

您也可以这样做:

> Nums=c(List1Nums,List2Nums,List3Nums,List4Nums)
> List=c(List1,List2,List3,List4)
> data=cbind(Nums,List)
> 
> data
      Nums List
 [1,]  600    1
 [2,]  500    1
 [3,]  400    1
 [4,]  300    1
 [5,]  200    1
 [6,]  550    2
 [7,]  450    2
 [8,]  350    2
 [9,]  275    3
[10,]  375    3
[11,]  475    3
[12,]  575    3
[13,]  310    4
[14,]  410    4
[15,]  510    4
[16,]  610    4