我是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
答案 0 :(得分:1)
Normaly,data.frames只有在具有相同的名字时才能加入。
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的功能,因为它不是空的。