2017-07-18 20 views
1

Rについて少しはわかりますが、使用してからしばらくしています。私はこの問題に関する助けやヒントを感謝します。数値(データフレーム)を持つ2つの列がある場合、どのようにそれらを比較して、2つの列の最初の行が等しい場合、その列の値が "等号"または "一致"または "NA"等しくなければ、それらの特定の行の値は同じままですか?私は、正しい/間違った値で新しい列を作成したくないので、同じままにする列数とそれらのデータを置き換える必要があります。これはif関数ですか?2つの列が一致する場合は値を置き換えます

また、サンプル#列である最初の列が完全に同じ出力になるようにする必要があります。 (正しいデータで金=列Au_ppb =不正なデータ)、元のファイルがどのように見えるか

:ここ

は一例です

それは後にどのように見えるか
Sample# Au Au_ppb 
3000 0.2 0.2  
3001 0.2 >3  
3002 0.2 0.2  
3003 0.2 0.2 
3004 0.3 1.0 

Sample# Au Au_ppb 
3000 EQUAL EQUAL 
3001 0.2 >3  
3002 EQUAL EQUAL 
3003 EQUAL EQUAL 
3004 0.3 1.0 

ありがとうございました!

答えて

1

等しい値のインデックスを取得し、それらを優先テキスト(ここでは "EQUAL")に置き換えることができます。

ind <- df$Au == df$Au_ppb 
df[ind, c("Au", "Au_ppb")] <- "EQUAL" 

# Sample Au Au_ppb 
#1 3000 EQUAL EQUAL 
#2 3001 0.2  >3 
#3 3002 EQUAL EQUAL 
#4 3003 EQUAL EQUAL 
#5 3004 0.3 1.0 

またはワンライナー:

df[df$Au == df$Au_ppb, c("Au", "Au_ppb")] <- "EQUAL" 
+0

ありがとう、これは完全に働いた!!私はそれを試したときに最初にエラーが発生したと付け加えたいと思いますが、コードを修正することができました(あなたのコードではなく、stringsAsFactors = FALSEを使用してファイルをロードしなければなりません)。再度、感謝します! = D –

1
replace(x = df, 
     list = cbind(which(df$Au == df$Au_ppb), 
        rep(c(2,3), each = length(which(df$Au == df$Au_ppb)))), 
     values = "EQUAL") 
# Sample. Au Au_ppb 
#1 3000 EQUAL EQUAL 
#2 3001 0.2  >3 
#3 3002 EQUAL EQUAL 
#4 3003 EQUAL EQUAL 
#5 3004 0.3 1.0 
+0

おかげでトン!このコードもうまくいきましたが、もう少し短かったのでもう1つを選択しました。しかし、これも働いて、本当に助けに感謝! –

関連する問題