我在使用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)有人能帮我指出正确的方向吗?
谢谢!
发布于 2019-12-10 20:12:14
你也可以这样做:
> 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发布于 2019-12-10 20:07:25
一个选项是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$"))) 如果“列表”值可以是对象名称
如果我们也需要使用List1,List2等,向量
do.call(rbind, Map(cbind, mget(ls(pattern = "^List\\d+Nums$")),
mget(paste0("List", 1:4))))https://stackoverflow.com/questions/59274575
复制相似问题