0

我正在将几个data.frames 与rbindR 合并。我希望输出在每个之间包含一个中断,data.frame例如一个新行,data.frames 之间只有“#”字符。

请让我知道这是否/如何可能。

4

1 回答 1

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))
    }))
}

让我们用一些 s 来尝试一下data.frame

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 ---- ----

当然,仅使用byprint 方法就可以实现类似(但不相同)的方法。例如,查看以下输出:

print.by(list(m1, d2, d3))
于 2015-01-01T06:45:47.667 回答