2016-11-10 24 views
1
> dummy <- data.frame(X = c(1, 2, 3, 4, 5, 5, 2, 6, 7, 2), Y = c(3, 2, 1, 4, 5, 6, 7, 3, 4, 2)) 
> dummy 
    X Y 
1 1 3 
2 2 2 
3 3 1 
4 4 4 
5 5 5 
6 5 6 
7 2 7 
8 6 3 
9 7 4 
10 2 2 

私は1から7までの値からなるdata.frameを持っています。私は1を7に(逆もまた同様に)、2を6に逆もまた同様)、3対5(およびその逆)、4対4のままになります。私。本質的に私は数字を「逆転させたい」。私は各列の各値を繰り返し処理するforループを作成し、ifelseステートメントを使用することを考えましたが、どうすれば7対1と1対7を同時に変更できますか?R:data.frameの値を変更する方法

答えて

10

あなたは切り替えたい番号のすべてのペアが8の合計を持って考えると、あなたは8から元のデータフレームを引くことができますし、あなたが望むようあなただけの8 - dummyを行うことができますので、すべての値が、元に戻すべきである:

もう少し一般的な作り
dummy = 8 - dummy 
dummy 
# X Y 
#1 7 5 
#2 6 6 
#3 5 7 
#4 4 4 
#5 3 3 
#6 3 2 
#7 6 1 
#8 2 5 
#9 1 4 
#10 6 6 
2

max(dummy) + min(dummy) - dummy 
    X Y 
1 7 5 
2 6 6 
3 5 7 
4 4 4 
5 3 3 
6 3 2 
7 6 1 
8 2 5 
9 1 4 
10 6 6 
+0

あなたはPsidomの答えを編集したはずです。 – Uwe

3

matchはこれを行うには正しいジェネリック方法です - それはあなたが素敵な数学的な操作を見つけることができない場合でも動作しますまずkeyのi番目のエントリは、あなたがvalueの対応するエントリに置き換えたいkeyvalueベクトル、セットアップ

key = 1:7 # key to look up (current value) 
value = 7:1 # desired value corresponding to key 

dummy$newX = value[match(dummy$X, key)] 
dummy$newY = value[match(dummy$Y, key)] 

# X Y newX newY 
# 1 1 3 7 5 
# 2 2 2 6 6 
# 3 3 1 5 7 
# 4 4 4 4 4 
# 5 5 5 3 3 
# 6 5 6 3 2 
# 7 2 7 6 1 
# 8 6 3 2 5 
# 9 7 4 1 4 
# 10 2 2 6 6 

をあなたは、もちろん、直接XYを上書きする可能性が - Iそれらを両方ともここに保ち、それが働いたことを実証してください。

関連する問題