在R中使用rbind.fill时保留行名称

时间:2013-05-07 14:54:23

标签: r plyr rbind

有谁知道如何在rbind.fill函数中保留rownames。

library(plyr)

#creating data
a <- mtcars[ 1:5 , c("mpg","hp","gear") ]
b <- mtcars[ 6:10 , c("mpg","disp","gear") ]

#does not work because there are different colnames
rbind(a,b)

#works but eliminates the rownames
bound <- rbind.fill( a , b )

我正在设置一个循环,使用rbind.fill连接对象。现在我正在使用这样的组合函数:

namess <- c( rownames(a) , rownames(b) )
rownames(bound) <- namess

我认为可能有更好的方法。谢谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试应用执行rbind.fill的自定义函数,并自动设置初始rownames:

# List of sample data
ab.list <- list(a <- mtcars[1:5 , c("mpg","hp","gear")], 
                b <- mtcars[6:10 , c("mpg","disp","gear")])

# Apply custom function (rbind and rownames adjustment) to sample data
do.call(function(...) {

  tmp <- plyr::rbind.fill(...)
  rownames(tmp) <- sapply(ab.list, function(i) {
    rownames(i)
  })

  return(tmp)

}, ab.list)

                   mpg  hp gear  disp
Mazda RX4         21.0 110    4    NA
Mazda RX4 Wag     21.0 110    4    NA
Datsun 710        22.8  93    4    NA
Hornet 4 Drive    21.4 110    3    NA
Hornet Sportabout 18.7 175    3    NA
Valiant           18.1  NA    3 225.0
Duster 360        14.3  NA    3 360.0
Merc 240D         24.4  NA    4 146.7
Merc 230          22.8  NA    4 140.8
Merc 280          19.2  NA    4 167.6

查看处理类似问题的this previous post

答案 1 :(得分:1)

自从我五年前发布这个问题以来,我们又推出了一项新功能。 smartbind解决了这个问题。

library( gtools) 

#creating data
a <- mtcars[ 1:5 , c("mpg","hp","gear") ]
b <- mtcars[ 6:10 , c("mpg","disp","gear") ]

smartbind( a , b )