【问题标题】:Including gaps when merging data frames with rbind使用 rbind 合并数据帧时包括间隙
【发布时间】:2012-10-02 08:45:53
【问题描述】:

我在 R 中将多个 data.frames 与 rbind 合并。我希望输出在每个 data.frame 之间包含一个中断,例如在 data.frames 之间仅包含“#”字符的新行。

如果/如何可能,请告诉我。

【问题讨论】:

  • rbinding 的重点是使其成为一个连续的数据块。如果你想把事情分开,你最好把所有的data.frames收集到list
  • 好的,谢谢,我会调查的
  • 你在这里的目的是什么?如果您向我们提供有关您正在尝试做的事情的更多信息,我认为我们可以为您提供帮助。
  • 既然您在谈论“输出”,您主要关心的是打印或格式化某些文档时数据的外观吗?

标签: r merge dataframe


【解决方案1】:

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

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.frames:

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

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 2020-08-05
    • 1970-01-01
    • 2015-05-13
    • 2014-10-02
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多