![](/img/trans.png)
[英]checking if two dataframes have the same values at the same row and column in R
[英]Checking equality of elements in 2 dataframes in R column by column
我正在嘗試使用all.equal
函數逐列檢查R中兩個數據幀的元素是否相等,我想使用for循環進行此操作。 我是R的新手,所以不確定如何編寫包含兩個數據幀的for循環。
任何幫助表示贊賞。
我注意到這個問題尚未得到解答,所以我想我會給出一個答案供將來參考。
為了提供一個有效的示例,我將使用R附帶的mtcars
數據集作為datasets
包的一部分。
因此,首先,我們創建一個虛擬數據集以與mtcars進行比較。 讓我們把這個數據集mtcars2
並讓我們列5和11, drat
和carb
分別,不同從原來的一定程度mtcars
同行,同時保持列1至4和列6至10完好無損。 為了使第5列和第11列“混亂”,我們將jitter()
與簡單的乘法結合使用。
mtcars2 <- as.data.frame(cbind(mtcars[, 1:4], "drat" = jitter(mtcars[,5]) * 4,
mtcars[,6:10], "carb" = jitter(mtcars[,11])* 0.5))
因此,現在我們有了一個虛擬數據集,可以與for循環中的mtcars
進行比較。 接下來,我們准備一個data.frame以寫入for循環的結果。 我們需要一個data.frame,它的行數等於我們要比較的列數,我們需要兩列,一個col_number
來顯示相應的all.equal()
結果所指的是哪一列。 然后,當然,我們需要另一列AE_result
來存儲將要調用的all_equal()
函數的結果。 我們稱這個data.frame df_AE
,我們將宣布col_number
是一個數字矢量, AE_result
是一個特征向量。
width <- ncol(mtcars)
df_AE <- as.data.frame(matrix(0L, nrow = width, ncol = 2))
names(df_AE) <- c("col_number", "AE_result")
class(df_AE$col_number) <- "numeric"
class(df_AE$AE_result) <- "character"
因此,現在我們准備好進行實際的for循環了 ,在該循環中 ,我們將對各列進行計數,在每對列上調用all.equal
,並將計數器( i
)和結果( x
)寫入df_AE
data.frame。
for (i in 1:width) {
x <- all.equal(mtcars[, i], mtcars2[, i])
df_AE[i,1] <- i
df_AE[i,2] <- x
}
因此,現在當我們調用df_AE
,將得到如下所示的內容:
df_AE
> df_AE
col_number AE_result
1 1 TRUE
2 2 TRUE
3 3 TRUE
4 4 TRUE
5 5 Mean relative difference: 3.000102
6 6 TRUE
7 7 TRUE
8 8 TRUE
9 9 TRUE
10 10 TRUE
11 11 Mean relative difference: 0.4982218
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.