我有一些名称为 a1、b1、c1 的对象,并希望使用带有名称的列表将它们全部合并到一个 df 中,而不是手动将它们写下来而不加引号。问题是我不知道如何删除引号以合并它们。这是我的代码:
a1=rnorm(10)
b1=rnorm(10)
c1=rnorm(10)
mylist=c("a1","b1","c1")
mylist2=gsub('"',"",mylist)
myarray=merge(mylist2)
These aren't data.frame
's so you can't merge them as you have in your example. Perhaps you meant to cbind
these?
You can use do.call
and use your actual data.frame
's in a list and cbind
them that way...
mylist = list(a1,b1,c1)
do.call("cbind",mylist)
# [,1] [,2] [,3]
# [1,] 0.4221196 -1.2364700 1.71030549
# [2,] 0.2190202 -0.7730380 -0.27255412
# [3,] -0.1123769 -0.3365485 0.99418659
# [4,] 0.2940520 -1.2661584 -0.28545402
# [5,] 0.6301444 -1.3027926 -1.15401858
# [6,] 0.3505416 0.1636393 0.18114359
# [7,] -1.4592066 1.5832108 0.01407487
# [8,] -1.4251704 -1.1620232 -0.86712358
# [9,] -0.2840417 -2.3878617 0.57925139
#[10,] -0.9331564 1.1445266 -1.64355007
Of course here, you can just do cbind( a1, b1 , c1 )
, so this notation is only handy if your vectors are in a list.
If you do want to merge
them, the problem is that merge
merges two data.frames, so you need a recursive function that adds a new data.frame to the result as you move through the list. Fortunately, such a function exists (it is actually quite simple to do), and is in Haldey's reshape
package...
a1 <- data.frame( ID = 1:10 , A = rnorm(10) )
b1 <- data.frame( ID = 1:10 , B = rnorm(10) )
c1 <- data.frame( ID = 1:10 , C = rnorm(10) )
mylist <- list( a1 , b1 , c1 )
require(reshape)
merge_recurse( mylist )
# ID A B C
#1 1 0.4922820 1.44436959 0.49294607
#2 2 1.0198506 0.80738257 -1.51090757
#3 3 0.2403974 0.47383044 -0.74280235
#4 4 0.9697800 -1.06054666 -1.11042732
#5 5 1.4001970 -0.30221304 1.62866212
#6 6 0.4705122 0.02784419 -0.05886697
#7 7 -0.4259260 0.29810051 0.77933144
#8 8 -0.5102871 0.36181297 1.51223053
#9 9 1.1900207 -0.60902034 -0.32316668
#10 10 -0.1694786 0.20842787 -0.33366816