2015-11-23 100 views
1

我想在我的数据框中添加一个新列,以便对于每一行如果LOC == 1那么V等于V1的给定值;如果LOC==2V等于V2给出的值。这里有一个例子:根据数据帧中的条件填写新列

df <- 
LOC V1 V2 
1 0.5 0.7 
1 0.5 0.7 
2 0.5 0.7 
1 0.6 0.8 

的结果应该是:

df <- 
LOC V1 V2 V 
1 0.5 0.7 0.5 
1 0.5 0.7 0.5 
2 0.5 0.7 0.7 
1 0.6 0.8 0.6 

我需要怎么做帮助,在R.

回答

2

如果LOC只包含1或2,那么这将工作

df$V <- ifelse(df$LOC == 1, df$V1, df$V2) 
+0

对于2组来说,这是一个很好的解决方案,但如果您的列数超过2列,它将很快变得复杂。 – thelatemail

+0

@thelatemail,同意。我喜欢你的方法,用矩阵子设置总是很有趣! –

3

使用矩阵索引:

idx <- cbind(seq_len(nrow(dat)), dat$LOC) 
#  row col 
#  [,1] [,2] 
#[1,] 1 1 
#[2,] 2 1 
#[3,] 3 2 
#[4,] 4 1 

dat[-1][idx] 
#[1] 0.5 0.5 0.7 0.6 
+0

谢谢。但是有没有更简单的方法可以将它添加到我拥有的数据框中? – daragh

+0

@daragh - 'dat $ V < - dat [-1] [idx]'你就完成了。我不确定这有什么困难。 – thelatemail