方法 1:
df1<-data.frame(A=1:5,B=2:6)
df2<-data.frame(A=1:5,B=2:6)
df3<-rbind(df1,df2)
row.names(df3)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
方法 2:
df1<-data.frame(matrix(data = c(1:5,2:6),
nrow = 5,
dimnames = list(c(1:5),c("A","B"))))
df2<-data.frame(matrix(data = c(1:5,2:6),
nrow = 5,
dimnames = list(c(1:5),c("A","B"))))
df3<-rbind(df1,df2)
row.names(df3)
[1] "1" "2" "3" "4" "5" "11" "21" "31" "41" "51"
我理解行名应该是唯一的值,我想知道为什么方法 1 和方法 2 会在行名中产生不同的结果?
在方法 1中,行名称是整数
并且它们在之后保持整数
rbind
在方法 2中,行名称是字符串
并且它们仍然是原始类,字符串(字符),之后
rbind
字符串无法被枚举,因此通过在字符串中添加索引使它们变得唯一。
row.names=NULL
您可以在从具有给定行名的矩阵创建数据框时通过添加来使两者相等。我认为@Andre Wildberg已经对“为什么第二种方法与第一种方法不一样”做出了详细的解释。
以下只是一个简单的解决方法,用于
list2DF
过滤掉原始row.name
信息或者
rbind
像下面这样调用您可以使用它
.row_names_info
来获取“数据框行名的内部形式的信息”。当其type
参数为 1(默认值)时,它会返回行数,“‘自动’行名带有负号”,如您的第一个示例所示。对于用户生成的名称,它会返回一个正数,如您的第二个示例所示。虽然原始数据框的打印行名相同,但是在行绑定时,“自动”和用户定义行名的不同内部表示会被区别处理。
另一个示例是调用中没有行名
matrix
,这会导致调用中自动出现行名data.frame
;因此.row_names_info
导致负数: