我正在尝试创建一个新变量(var5),它根据因子变量(var4)的级别从数据帧中其他数字变量之一(var1,var2或var3)中获取值

variables=data.frame(var1=c(2,3,4,5), var2=c(20,30,40,50), var3=c(200,300,400,500), var4=c('var1','var2','var3','var1'))


变数

  var1 var2 var3 var4
1    2   20  200 var1
2    3   30  300 var2
3    4   40  400 var3
4    5   50  500 var1


预期结果将是这样的:

  var1 var2 var3 var4 var5
1    2   20  200 var1    2
2    3   30  300 var2   30
3    4   40  400 var3  400
4    5   50  500 var1    5


我找不到解决的办法。

最佳答案

我确定有人可以提出一些更好的建议,但是dplyr::case_when()可以完成工作:

library(dplyr)

data.frame(
  var1 = c(2, 3, 4, 5),
  var2 = c(20, 30, 40, 50),
  var3 = c(200, 300, 400, 500),
  var4 = c('var1', 'var2', 'var3', 'var1')) %>%
  mutate(var5 = case_when(var4 == "var1" ~ var1,
                          var4 == "var2" ~ var2,
                          var4 == "var3" ~ var3))

09-25 16:49
查看更多