将数据框与rbind合并时包含间隙

时间:2012-10-02 08:45:53

标签: r merge dataframe

我在R中合并了几个data.framerbind。我希望输出在每个data.frame之间包含一个中断,例如只有'#'字符的新行在data.frame之间。

如果有可能,请告诉我。

1 个答案:

答案 0 :(得分:0)

我不确定为什么除了视觉分离之外,有人会想要这样做。如果是这种情况,也许您可​​以使用类似这样的函数(但请注意,输出实际上并不正常)。

hashbind <- function(..., hash = "#") {
  lst <- list(...)
  Nchar <- max(rapply(lst, function(y) nchar(as.character(y)))) + 2
  do.call(
    rbind, 
    lapply(lst, function(x) {
      rbind(x, substr(paste(rep(hash, Nchar), collapse = ""), 1, Nchar))
    }))
}

让我们试试一些data.frame s:

d1 <- data.frame(A = 1:2, B = 3:4)
d2 <- data.frame(A = 5:6, B = 7:8)
d3 <- data.frame(A = 1:10, B = 11:20)

hashbind(d1, d2, d3)
#       A    B
# 1     1    3
# 2     2    4
# 3  #### ####
# 4     5    7
# 5     6    8
# 6  #### ####
# 7     1   11
# 8     2   12
# 9     3   13
# 10    4   14
# 11    5   15
# 12    6   16
# 13    7   17
# 14    8   18
# 15    9   19
# 16   10   20
# 17 #### ####

和一些矩阵:

m1 <- matrix(1:4, ncol = 2)
m2 <- matrix(5:8, ncol = 2)
m3 <- matrix(1:20, ncol = 2)

hashbind(m1, m2, m3)
#       [,1]   [,2]  
#  [1,] "1"    "3"   
#  [2,] "2"    "4"   
#  [3,] "####" "####"
#  [4,] "5"    "7"   
#  [5,] "6"    "8"   
#  [6,] "####" "####"
#  [7,] "1"    "11"  
#  [8,] "2"    "12"  
#  [9,] "3"    "13"  
# [10,] "4"    "14"  
# [11,] "5"    "15"  
# [12,] "6"    "16"  
# [13,] "7"    "17"  
# [14,] "8"    "18"  
# [15,] "9"    "19"  
# [16,] "10"   "20"  
# [17,] "####" "####"

可视分隔符可以自定义:

hashbind(d1, d2, d3, hash = "-")
#       A    B
# 1     1    3
# 2     2    4
# 3  ---- ----
# 4     5    7
# 5     6    8
# 6  ---- ----
# 7     1   11
# 8     2   12
# 9     3   13
# 10    4   14
# 11    5   15
# 12    6   16
# 13    7   17
# 14    8   18
# 15    9   19
# 16   10   20
# 17 ---- ----

当然,只需使用by打印方法就可以实现类似(但不完全相同)的方法。例如,查看输出:

print.by(list(m1, d2, d3))