我正在尝试根据第三列中的值创建一个由其他列填充的新变量。例如,请考虑以下数据:
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的行等等。
我的代码是否有问题?关于问题是什么以及如何解决它的任何想法?
谢谢!
答案 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