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



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

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"中的值从我们的 1、我们的 2、我们的 3、我们的 4 或我们的 5 填充。如果 x 的值为 1,y 将取 our1 的值;如果 "x" 的值为 2,则 y 将取 our2 的值;等等。对于上面的示例,它将以这种方式填充:

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 列。但只有 our1 中的值会转到正确行中的 y 列。our2 的值转到 x=12 的行,our3 的值转到 x=16 的行,our4 的值转到 x=17 的行,依此类推。

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

谢谢!!

我们可以通过row/column索引轻松做到这一点。 使用"x"列作为列索引,cbind行序列从数据集的子集中提取元素(不带"x"列 -df[-1])

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

最新更新