Tengo dos marcos de datos con dos columnas (por ejemplo, xey). Necesito comparar los dos marcos de datos y ver si alguno de los valores en x o y o ambos xey son similares en los dos marcos de datos.¿Cómo comparar dos marcos de datos?
Respuesta
Utilice all.equal
function. No ordena los marcos de datos. Simplemente comprobará cada celda en data frame
contra la misma celda en otra. También puede usar la función identical()
.
Sin un ejemplo, no puedo estar seguro de que entiendo lo que quiere. Sin embargo, creo que quieres algo como esto. Si es así, seguramente hay mejores formas de hacer lo mismo.
a <- matrix(c(1,2,
3,4,
5,6,
7,8), nrow=4, byrow=T, dimnames = list(NULL, c("x","y")))
b <- matrix(c(1,2,
9,4,
9,6,
7,9), nrow=4, byrow=T, dimnames = list(NULL, c("x","y")))
cc <- matrix(c(NA,NA,
NA,NA,
NA,NA,
NA,NA), nrow=4, byrow=T, dimnames = list(NULL, c("x","y")))
for(i in 1:dim(a)[1]) {
for(j in 1:dim(a)[2]) {
if(a[i,j]==b[i,j]) cc[i,j]=a[i,j]
}
}
cc
EDITAR: 8 Enero 2,013 mil
La siguiente línea le dirá que las células difieren entre las dos matrices:
which(a != b, arr.ind=TRUE)
# row col
# [1,] 2 1
# [2,] 3 1
# [3,] 4 2
Si las dos matrices, a y b, son idénticos entonces :
which(a != b)
# integer(0)
which(a != b, arr.ind=TRUE)
# row col
EDITAR 9 de enero de, 2012
El siguiente código muestra el efecto que los nombres de fila pueden tener en identical
, all.equal
y which
cuando se crea uno de los dos marcos de datos mediante el subconjunto de un tercer marco de datos. Si los nombres de fila difieren entre las dos tramas de datos que se comparan, entonces ni identical
ni all.equal
devolverán TRUE
. Sin embargo, which
se puede usar para comparar las columnas x
y y
entre los dos marcos de datos. Si los nombres de fila están configurados en NULL
para cada una de las dos tramas de datos que se comparan, tanto identical
como all.equal
devolverán TRUE
.
df1 <- read.table(text = "
group x y
1 10 20
1 10 20
1 10 20
1 10 20
2 1 2
2 3 4
2 5 6
2 7 8
", sep = "", header = TRUE)
df2 <- read.table(text = "
group x y
2 1 2
2 3 4
2 5 6
2 7 8
", sep = "", header = TRUE)
# df3 is a subset of df1
df3 <- df1[df1$group==2,]
# rownames differ between df2 and df3 and
# therefore neither 'all.equal' nor 'identical' return TRUE
# even though the i,j cells of df2 and df3 are the same.
# Note that 'which' indicates no i,j cells differ between df2 and df3
df2
df3
all.equal(df2, df3)
identical(df2, df3)
which(df2 != df3)
# set row names to NULL in both data sets and
# now both 'all.equal' and 'identical' return TRUE.
# Note that 'which' still indicates no i,j cells differ between df2 and df3
rownames(df2) <- NULL
rownames(df3) <- NULL
df2
df3
all.equal(df2, df3)
identical(df2, df3)
which(df2 != df3)
- 1. ¿Cómo combino dos marcos de datos basados en dos columnas?
- 2. ¿Cómo comparar dos bases de datos?
- 3. Pegar columnas de dos marcos de datos
- 4. Aplicar sobre dos marcos de datos
- 5. Agregar dos marcos de datos de pandas
- 6. ¿Cómo comparar dos consultas?
- 7. Proceso para comparar dos conjuntos de datos
- 8. ¿Comparar estructuras de dos bases de datos?
- 9. Comparar dos bases de datos SQL
- 10. Cómo comparar dos fechas
- 11. ¿Cómo comparar dos NSInteger?
- 12. ¿Cómo comparar dos NSIndexPaths?
- 13. cómo comparar dos NSMutableArray?
- 14. Combinar dos marcos de datos y eliminar columnas duplicadas
- 15. Comparar dos UIImages
- 16. Cómo comparar dos X509Certificate2 C#
- 17. ¿Cómo comparar dos variables CGSize?
- 18. ¿Cómo comparar dos expresiones regulares?
- 19. ¿Comparar dos hashsets?
- 20. comparar dos tipos
- 21. Comparar dos NSDates
- 22. oracle diff: cómo comparar dos tablas?
- 23. Comparar dos archivos
- 24. comparar dos ArrayList
- 25. Comparar dos JObjects o JArray
- 26. ¿Cómo comparar el contenido de dos matrices?
- 27. Cómo comparar dos matrices de bytes
- 28. ¿Cómo comparar el tamaño de dos directorios?
- 29. Comparar dos vectores C++
- 30. Java comparar dos listas
Necesitaremos saber qué contiene el marco de datos: enteros, numéricos, factores, ¿algo más? Por ejemplo, un marco de datos de ejemplo realmente simple que contiene datos numéricos aleatorios se puede hacer por 'df1 <- data.frame (x = rnorm (10), y = rnorm (10))' y dos de estos se pueden sustraer directamente siempre que tengan los mismos nombres de columna (pero el orden de sus filas sería crítico para una respuesta correcta). –