我試圖用all.equal
函數檢查R列中兩個數據幀的元素是否相等,並且我想使用for循環來執行此操作。我是R新手,所以我不確定如何編寫包含兩個數據框的for循環。檢查R列中的2個數據幀中元素的等於列
任何幫助表示讚賞。
我試圖用all.equal
函數檢查R列中兩個數據幀的元素是否相等,並且我想使用for循環來執行此操作。我是R新手,所以我不確定如何編寫包含兩個數據框的for循環。檢查R列中的2個數據幀中元素的等於列
任何幫助表示讚賞。
我注意到這個問題還沒有得到回答,所以我想我會爲未來的參考寫下答案。
爲了提供一個工作示例,我將使用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))
所以現在我們有一個虛擬的數據集來比較mtcars
在我們的for循環。接下來我們準備一個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