我在R中合并了几个data.frame
和rbind
。我希望输出在每个data.frame
之间包含一个中断,例如只有'#'字符的新行在data.frame
之间。
如果有可能,请告诉我。
答案 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))