2017-01-23 19 views
0

all.equal関数を使用してR列の2つのデータフレームの要素の等価性をチェックしようとしていますが、これはforループを使用して行います。私はRに新しいので、2つのデータフレームを含むforループを書く方法がわかりません。R列の2つのデータフレームの要素の等価性を確認する

何か助けていただければ幸いです。

答えて

0

私はこの質問に答えられていないことに気付いたので、私は将来の参考のために答えを記入したと思った。

実例を提供するために、datasetsパッケージの一部としてRに付属するmtcarsデータセットを使用します。

まず、mtcarsと比較するためのダミーデータセットを作成しましょう。このデータセットをmtcars2とし、列5と11、dratcarbを作成しましょう。元の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を準備します。比較する列の数と等しい数の行を持つdata.frameが必要です。対応するall.equal()の結果を参照する列を示すには、という2つの列が必要です。そして、もちろん、私たちが呼び出すall_equal()関数の結果を格納する別の列AE_resultが必要です。このdata.frame df_AEとし、col_numberを数値ベクトル、AE_resultを文字ベクトルと宣言します。私たちは列の各ペアにall.equalを呼び出して、カラムを通して我々の方法をカウントし、カウンタを書く(i)とよ

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ループ実際の準備ができています、結果(x)をdf_AE data.frameに送信してください。

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 
:我々はdf_AEを呼び出すときに

for (i in 1:width) { 
    x <- all.equal(mtcars[, i], mtcars2[, i]) 
    df_AE[i,1] <- i 
    df_AE[i,2] <- x 
} 

だから今、私たちはこのような何かを得るでしょう

関連する問題