【发布时间】:2021-05-24 20:11:32
【问题描述】:
我正在尝试从我的数据框/tibble 中依赖于列 var 中的值的其他列中查找值。我可以通过在case_when() 中对它们进行硬编码来实现这一点:
library(tidyverse)
set.seed(1)
ds <- tibble(var = paste0("x", sample(1:3, 10, replace = T)),
x1 = 0:9,
x2 = 100:109,
x3 = 1000:1009)
ds %>%
mutate(result = case_when(var == "x1" ~ x1,
var == "x2" ~ x2,
var == "x3" ~ x3))
#> # A tibble: 10 x 5
#> var x1 x2 x3 result
#> <chr> <int> <int> <int> <int>
#> 1 x1 0 100 1000 0
#> 2 x3 1 101 1001 1001
#> 3 x1 2 102 1002 2
#> 4 x2 3 103 1003 103
#> 5 x1 4 104 1004 4
#> 6 x3 5 105 1005 1005
#> 7 x3 6 106 1006 1006
#> 8 x2 7 107 1007 107
#> 9 x2 8 108 1008 108
#> 10 x3 9 109 1009 1009
但是,如果我不是只有 3 列而是有很多 xn 列怎么办?
我发现以下适用于外部变量/对象:
y <- "x2"
ds %>%
mutate(result = !!sym(y))
#> # A tibble: 10 x 5
#> var x1 x2 x3 result
#> <chr> <int> <int> <int> <int>
#> 1 x1 0 100 1000 100
#> 2 x3 1 101 1001 101
#> 3 x1 2 102 1002 102
#> 4 x2 3 103 1003 103
#> 5 x1 4 104 1004 104
#> 6 x3 5 105 1005 105
#> 7 x3 6 106 1006 106
#> 8 x2 7 107 1007 107
#> 9 x2 8 108 1008 108
#> 10 x3 9 109 1009 109
但它不适用于 tibble 中的内部变量/列:
ds %>%
mutate(result = !!sym(var))
#> Error: Only strings can be converted to symbols
由reprex package (v2.0.0) 于 2021 年 5 月 24 日创建
非常感谢任何有关如何使其在数据框/小标题列中工作的想法。
【问题讨论】:
标签: r