Método 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"
Método 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"
Entendo que os nomes das linhas devem ser valores únicos. Gostaria de saber por que o Mehtod1 e o Método 2 geram resultados diferentes nos nomes das linhas?
No Método 1 , os nomes das linhas são inteiros
e eles permanecem inteiros depois
rbind
No Método 2 , os nomes das linhas são strings
e também permanecem a classe original, strings (caractere), após
rbind
Strings não podem ser enumeradas, então elas se tornam únicas adicionando um índice à string.
Você pode igualar os dois adicionando
row.names=NULL
ao criar o quadro de dados a partir de uma matriz com nomes de linhas fornecidos.Acho que @Andre Wildberg já fez uma explicação elaborada sobre "Por que o segundo método não funciona da mesma forma que o primeiro" .
Abaixo está apenas uma solução alternativa simples
list2DF
para filtrar asrow.name
informações originaisou ligue
rbind
como abaixoVocê pode usar
.row_names_info
para obter "informações sobre a forma interna dos nomes de linha para um data frame". Quando seutype
argumento é 1 (padrão), ele retorna o número de linhas "com um sinal negativo para nomes de linha 'automáticos' ", como no seu primeiro exemplo. Para nomes gerados pelo usuário, ele retorna um número positivo, como no seu segundo exemplo.Embora os nomes das linhas impressas dos quadros de dados originais sejam idênticos, a representação interna diferente dos nomes de linhas "automáticos" e definidos pelo usuário são tratados de forma diferente quando as linhas são vinculadas.
Outro exemplo sem nomes de linha na
matrix
chamada, o que resulta em nomes de linha automáticos nadata.frame
chamada; portanto,.row_names_info
resulta em um número negativo: