I am having some trouble using rbind to join a series of numeric vectors.
Let's say I have:
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))
I want to use rbind() to join the series of List#Nums and List# so I would have a data frame that looks like:
Nums List
600 1
500 1
400 1
300 1
200 1
550 2
450 2
… ...
I tried using:
Nums=rbind(List1Nums,List2Nums,List3Nums,List4Nums)
List=rbind(List1,List2,List3,List4)
data=cbind(Nums,List)
I get an error message that reads:
Warning message:
number of columns of result is not a multiple of vector length (arg 2)
Can someone help point me in the right direction?
Thank you!
One option is mget
to get the values of all the 'ListdigitNums' objects in a list
, and stack
it to a two column 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
This can be also be written as
stack(mget(ls(pattern = "^List\\d+Nums$")))
If the 'List' values can be the object names
If we also need to use the List1
, List2
, etc, vectors
do.call(rbind, Map(cbind, mget(ls(pattern = "^List\\d+Nums$")),
mget(paste0("List", 1:4))))
You can do this also:
> 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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.