Числовые векторы RBIND (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)

Может ли кто-нибудь помочь мне в правильном направлении?

Спасибо!


person user2813606    schedule 10.12.2019    source источник


Ответы (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
person Bill Chen    schedule 10.12.2019
comment
Вау, не могу поверить, что не видел такого простого решения. Спасибо! - person user2813606; 10.12.2019

Одним из вариантов является mget, чтобы получить значения всех объектов ListdigitNums в list, и 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$"))) 

Если значения «Список» могут быть именами объектов


Если нам также нужно использовать векторы List1, List2 и т. д.

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