使用基于另一列有条件地选择的多个其他列的值创建新列

时间:2017-04-05 06:21:39

标签: r

我正在尝试根据第三列中的值创建一个由其他列填充的新变量。例如,请考虑以下数据:

x   our1    our2    our3    our4    our5    
4   10      50      40      30      20
1   20      10      50      40      30
3   30      20      10      50      40
2   40      30      20      10      50
5   50      40      30      20      10

我想创建一个新列“y”,它将根据“x”中的值填充my1,our2,our3,our4或my5。如果x的值为1,则y将取my1的值;如果“x”的值为2,则y将取my2的值;等等。对于上面的示例,它将以这种方式填充:

x   our1    our2    our3    our4    our5    y
4   10      50      40      30      20      30
1   20      10      50      40      30      20
3   30      20      10      50      40      10
2   40      30      20      10      50      30
5   50      40      30      20      10      10

以下是我正在使用的代码:

df$y <- NA
df$y[df$x==1]<-df$our1[df$x==1]
df$y[df$x==2]<-df$our2[df$x==2]
df$y[df$x==3]<-df$our3[df$x==3]
df$y[df$x==4]<-df$our4[df$x==4]
df$y[df$x==5]<-df$our5[df$x==5]

但是当我使用这段代码时,它会填充新列y中错误列的值。实际上,我有22列,我的代码应该从中拉出来。但是只有来自我们的值在正确的行中转到第y列。 our2的值转到x = 12的行,our3的值到x = 16的行,our4的值到x = 17的行等等。

我的代码是否有问题?关于问题是什么以及如何解决它的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用row/column索引轻松完成此操作。使用&#39; x&#39;列为列索引,cbind,其中包含从数据集子集中提取元素的行序列(不包含&#39; x&#39;列 - df[-1]

df$y <- df[-1][cbind(1:nrow(df), df$x)]
df$y
#[1] 30 20 10 30 10