2016-11-12 75 views
0

我在一個數據庫中有一列是一個變量,在另一列中有相應的索引值。我想用一組不同的數據替換索引變量,但是基於第一列中的變量。基於另一個變量差異地替換一列中的變量

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 

我想用依賴於Col1值的向量替換1到4的值。

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%的% 「A」] < - C(10,5,2,4)''DF $ COL2 [DF $ COL1%以% 「B」] < - c(20,19,8,5)''df $ col2 [df $ col1%in%「C」] < - c(30,25,20,17)' – Michael

回答

1

與嘗試data.table

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 

如果你需要的結果作爲data.frame,你總是可以通過

切換回高效
setDF(dt) 

沒有複製。

相關問題