2016-11-12 85 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) 

没有复制。