Tôi có hai khung dữ liệu có hai cột (ví dụ: x và y). Tôi cần phải so sánh hai dataframes và xem liệu bất kỳ giá trị trong x hoặc y hoặc cả hai x và y là tương tự trong hai dataframes.Làm thế nào để so sánh hai dataframes?
Trả lời
Sử dụng chức năng all.equal
. Nó không sắp xếp các khung dữ liệu. Nó sẽ chỉ cần kiểm tra từng ô trong data frame
với cùng một ô trong một ô khác. Bạn cũng có thể sử dụng chức năng identical()
.
Không có ví dụ, tôi không thể chắc chắn tôi hiểu những gì bạn muốn. Tuy nhiên, tôi nghĩ bạn muốn một cái gì đó như thế này. Nếu vậy, có những cách tốt hơn gần như chắc chắn để làm điều tương tự.
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
EDIT: 08 tháng 1 năm 2013
Các dòng sau sẽ cho bạn biết các tế bào khác nhau giữa hai ma trận:
which(a != b, arr.ind=TRUE)
# row col
# [1,] 2 1
# [2,] 3 1
# [3,] 4 2
Nếu hai ma trận, a, b là giống hệt nhau rồi :
which(a != b)
# integer(0)
which(a != b, arr.ind=TRUE)
# row col
EDIT ngày 9 tháng 1 năm 2012
Đoạn mã sau minh họa hiệu ứng tên hàng có thể có trên identical
, all.equal
và which
khi một trong hai khung dữ liệu được tạo bằng cách đặt một khung dữ liệu thứ ba. Nếu tên hàng khác nhau giữa hai khung dữ liệu được so sánh thì không phải identical
cũng không phải all.equal
sẽ trả lại TRUE
. Tuy nhiên, which
vẫn có thể được sử dụng để so sánh các cột x
và y
giữa hai khung dữ liệu. Nếu tên hàng được đặt thành NULL
cho mỗi khung dữ liệu được so sánh thì cả hai số identical
và all.equal
sẽ trả về 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. Làm thế nào để so sánh hai datetimes
- 2. Làm thế nào để so sánh hai NSInteger?
- 3. Làm thế nào để so sánh hai mảng?
- 4. làm thế nào để so sánh hai mảng trong python?
- 5. Làm thế nào để so sánh hai biến CGSize?
- 6. Làm cách nào để so sánh hai biểu thức lambda?
- 7. So sánh hai loại
- 8. So sánh hai băm?
- 9. Làm cách nào để so sánh hai băm?
- 10. Làm cách nào để so sánh hai phiên bản AssemblyName?
- 11. lắp ráp để so sánh hai số
- 12. So sánh hai mảng
- 13. So sánh hai UIImages
- 14. So sánh hai số NSStrings
- 15. Hãy so sánh hai ArrayList
- 16. java So sánh hai ngày
- 17. NSDate, so sánh hai ngày
- 18. Cách so sánh hai ngày?
- 19. Làm thế nào để so sánh Voldemort với Cassandra?
- 20. So sánh hai đối tượng
- 21. postgres - so sánh hai mảng
- 22. làm thế nào để so sánh hai phương pháp trong eclipse
- 23. Làm thế nào để so sánh các phần ngày của hai đối tượng Zend_Date?
- 24. Làm thế nào để so sánh hai đồ thị đối tượng .NET cho sự khác biệt?
- 25. Làm thế nào để so sánh hai Danh sách <String> với nhau?
- 26. Làm thế nào để so sánh hai giá trị kép trong Java?
- 27. làm thế nào để so sánh hai danh sách, trường hợp đối tượng trong python
- 28. Làm thế nào để so sánh kích thước của hai thư mục?
- 29. Làm thế nào để so sánh hai đối tượng trong thử nghiệm đơn vị?
- 30. Làm thế nào để so sánh hai biến đối tượng trong ngôn ngữ biểu thức EL?
Chúng tôi cần biết khung dữ liệu chứa: số nguyên, số, yếu tố, cái gì khác? Ví dụ một khung dữ liệu ví dụ thực sự đơn giản chứa dữ liệu số ngẫu nhiên có thể được thực hiện bởi 'df1 <- data.frame (x = rnorm (10), y = rnorm (10))' và hai trong số này có thể được trừ trực tiếp miễn là chúng có các tên cột giống nhau (nhưng thứ tự các hàng của bạn sẽ rất quan trọng đối với câu trả lời đúng). –