2016-11-12 6 views
0

1つのdbに変数を持ち、対応するインデックス値を別の列に持っています。インデックス変数を別のデータセットに置き換えたいのですが、最初の列の変数に基づいています。別の変数に基づいて1つの列の変数を差別的に置き換えます。

Col1 Col2 

A 1 
A 2 
A 3 
A 4 
B 1 
B 2 
B 3 
B 4 
C 1 
C 2 
C 3 
C 4 

1〜4の値をCol1値に依存するベクトルに置き換えたいとします。

If A: replace c(1:4) with c(10, 5, 2, 4) 
If B: replace c(1:4) with c(20, 19, 8, 5) 
IF C: replace c(1:4) with c(30, 25, 20, 17) 

これは私が他に依存せずに列にこれを行うために前に使用しましたが、私はそれが私の現在の状況で動作するように得ることができないコードです:

col 
1 
2 
3 
4 

index <- c(1:4) 
foo <- c(4,5,6,8) 
df$col <- foo[match(df$col, index)] 

col 
4 
5 
6 
8 
+0

解決策があります: 'df $ col2 [df $ col1%in%" A "] < - c(10,5,2,4)' 'df $ col2 [df $ col1%in%" B "] < - c(20、19、8、5) '' df $ col2 [df $ col1%in% "C"] < - c(30,25,20,17) ' – Michael

答えて

1

はとしようdata.table:あなたはdata.frameとして結果を必要とする場合には

library(data.table) 
dt <- data.table(Col1 = c(rep("A", 4), rep("B", 4), rep("C", 4)), 
       Col2 = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)) 

A <- c(10, 5, 2, 4) 
B <- c(20, 19, 8, 5) 
C <- c(30, 25, 20, 17) 

dt[Col1 == "A", Col2 := A] 
dt[Col1 == "B", Col2 := B] 
dt[Col1 == "C", Col2 := C] 

print(dt) 
    Col1 Col2 
1: A 10 
2: A 5 
3: A 2 
4: A 4 
5: B 20 
6: B 19 
7: B 8 
8: B 5 
9: C 30 
10: C 25 
11: C 20 
12: C 17 

、あなたは常に

によって効率的に切り替えることができます
setDF(dt) 

コピーしません。

関連する問題