首页 文章

空data.frame的数据帧列名

提问于
浏览
3

我是R的新手,并且想知道是否有人可以解释为什么在命名列之后将一行添加到空data.frame时,会重命名列名称 . 如果data.frame在命名列之前添加了行,或者在定义data.frame时包含空行,则不会发生这种情况 .

在添加行之前定义的列名称(观察新的列名称,'X.a. X.b . '):

df1 <- data.frame(character(), character(), stringsAsFactors = FALSE)
colnames(df1) <- c("one", "two")
df1 <- rbind(df1, c("a", "b"))
df1
#  X.a. X.b.
#1    a    b

在列定义之前添加的行:

df2 <- data.frame(character(), character(), stringsAsFactors = FALSE)
df2 <- rbind(df2, c("a", "b"))
colnames(df2) <- c("one", "two")
df2
#  one two
#1   a   b

在使用一个空行定义的数据框中添加行之前定义的列名:

df3 <- data.frame(character(1), character(1), stringsAsFactors = FALSE)
colnames(df3) <- c("one", "two")
df3 <- rbind(df3, c("a", "b"))
df3
#  one two
#1        
#2   a   b

1 回答

  • 1

    Normaly,data.frames只有在具有相同的colnames时才能连接 .

    data1 <- data.frame(x = 1, y = 1)
    data2 <- data.frame(x = 2, y = 2)
    rbind(data1, data2)
    

    否则,您将收到错误消息 .

    data1 <- data.frame(xa = 1, ya = 1)
    data2 <- data.frame(x = 2, y = 2)
    rbind(data1, data2)
    # Error in match.names(clabs, names(xi)) : names do not match previous names
    

    但是,如果其中一个data.frames为空,则非空data.frame将控制新data.frame的功能 .

    data1 <- data.frame(x = numeric(), y = numeric())
    data2 <- data.frame(xa = 2, ya = 2)
    rbind(data1, data2)
    
    data1 <- data.frame(xa = 2, ya = 2)
    data2 <- data.frame(x = numeric(), y = numeric())
    rbind(data1, data2)
    

    在你的情况下,c(“a”,“b”)被强制转换为data.frame,然后将其与其他data.frame连接起来 . 然后它为强制data.frame创建一个自动的colnames,它将控制新data.frame的功能,因为它不是空的 .

相关问题