【问题标题】:RBIND numeric vectors (R)RBIND 数值向量 (R)
【发布时间】:2020-04-04 01:45:40
【问题描述】:

我在使用 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)

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

谢谢!

【问题讨论】:

    标签: r list vector rbind cbind


    【解决方案1】:

    一个选项是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$"))) 
    

    如果“列表”值可以是对象名称


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

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

    【讨论】:

      【解决方案2】:

      你也可以这样做:

      > 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
      

      【讨论】:

      • 哇,我不敢相信我没有看到这么简单的解决方案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多