代码之家  ›  专栏  ›  技术社区  ›  robertspierre

合并行上的数据帧。名称:列用大写字母表示

  •  -1
  • robertspierre  · 技术社区  · 5 年前

    使用以下代码:

    d1 <- data.frame(a=c(1,2,3))
    d1$id <- c("A","B","C")
    d2 <- data.frame(b=c(4,5,6))
    d2$id <- c("A","B","C")
    d3 <- merge(d1, d2, by="id")
    print(d3)
    

    数据帧 d3 将包含一列“id”。

    使用以下代码:

    d1 <- data.frame(a=c(1,2,3))
    rownames(d1) <- c("A","B","C")
    d2 <- data.frame(b=c(4,5,6))
    rownames(d2) <- c("A","B","C")
    d3 <- merge(d1, d2, by="row.names")
    d3
    

    数据帧 d3 将包含一列“Row.names”。

    为什么R把它放在标题框里?为什么在第二个例子中,名字改为首字母大写?

    1 回复  |  直到 5 年前
        1
  •  1
  •   akrun    5 年前

    如果我们检查源代码 merge.data.frame ,它正在创建 Row.names 在里面 cbind 以及 0 基础条件是如果我们指定 by 对于 0 即按行合并(如下文文档部分所述)

    ...
    
    else {
            if (any(by.x == 0L)) {
                x <- cbind(Row.names = I(row.names(x)), x) ####
                by.x <- by.x + 1L
            }
            if (any(by.y == 0L)) {
                y <- cbind(Row.names = I(row.names(y)), y) ####
                by.y <- by.y + 1L
            }
            
    ...
    

    文档对此没有太多说明,除了

    名称“row.names”或数字0指定行名。如果按名称指定,则它必须唯一对应于输入中的命名列。