Her biri iki sütuna sahip iki adet veri çerçevem var (örneğin x ve y). İki veri çerçevesini karşılaştırmalı ve x veya y'deki veya x ve y'deki değerlerden herhangi birinin iki veri çerçevesinde benzer olup olmadığını görmem gerekiyor.İki veri tabanı nasıl karşılaştırılır?
cevap
all.equal
işlevini kullanın. Veri çerçevelerini sıralamaz. Her hücreyi data frame
'da aynı hücreye karşı diğerinde kontrol edecektir. identical()
işlevini de kullanabilirsiniz.
Örnek olmadan, ne istediğinizi anladığımdan emin değilim. Ancak bence böyle bir şey istiyorsun. Eğer öyleyse, aynı şeyi yapmak için neredeyse kesinlikle daha iyi yollar vardır.
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
DÜZENLEME: 8 Ocak 2013
aşağıdaki satırı hücreleri iki matrisin arasında farklılık hangi söyleyecektir:
which(a != b, arr.ind=TRUE)
# row col
# [1,] 2 1
# [2,] 3 1
# [3,] 4 2
iki matrisler, a ve b, daha sonra aynıysa :
which(a != b)
# integer(0)
which(a != b, arr.ind=TRUE)
# row col
DÜZENLEME 9 Ocak 2012
Aşağıdaki kod iki veri çerçevelerinin bir üçüncü veri çerçevesi alt kümesi tarafından oluşturulduğunda, satır adları identical
, all.equal
ve which
üzerindeki tesirini göstermektedir. Satır adları, karşılaştırılan iki veri çerçevesi arasında farklılık gösteriyorsa, ne identical
ne de all.equal
, TRUE
'u döndürecektir. Ancak, which
, iki veri çerçevesinin arasındaki sütunları x
ve y
karşılaştırmak için hala kullanılabilir. satır adları iki her biri bir veri NULL
olarak ayarlanmışsa çerçeveleri TRUE
döndürür sonra identical
ve all.equal
iki karşılaştırılan.
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)
Veri çerçevesinin neleri içerdiğini bilmemiz gerek: tam sayı, sayısal, faktör, başka bir şey? Örneğin rasgele sayısal verileri içeren bir çok basit bir örnek veri çerçevesi 'df1