R dplyr 从具有列名称的列中选择值以在单独的列中选择

2023-11-25

您好,我有一个数据框,其中包含不同的数据列(例如 x, y, z )和另一列,用于指定要选择的数据列。我想使用 dplyr::mutate (或类似的)来创建一个新列,该列的值与“choose”指定的列中的值相对应。但我想首先保留所有列。在我的真实数据中,我还有一些其他带有元数据的列。

示例数据:

library(dplyr)
testdf <- data.frame(x = 1:5, y = 11:15, z = 101:105, choose = c("z","y","x","y","z"))

我可以在我的示例中使用case_when但在我的实际脚本中,会生成列名称和选择列,并且可能具有不同的值,因此我不想对可能存在的名称进行硬编码。

期望的输出/测试

mutate(testdf, selectedValue = case_when(choose == "x" ~x,
                                     choose == "y"~ y,
                                     choose == "z"~ z, T~NA_integer_))

#>   x  y   z choose selectedValue
#> 1 1 11 101      z           101
#> 2 2 12 102      y            12
#> 3 3 13 103      x             3
#> 4 4 14 104      y            14
#> 5 5 15 105      z           105

Created on 2019-09-18 by the reprex package (v0.3.0)


这是一个 data.table 解决方案。在这种情况下,我认为 dplyr 解决方案并不比其他解决方案(特别是基本 r 和 data.table)更具人类可读性。

library(data.table)
testdt <- data.table(x = 1:5, y = 11:15, z = 101:105, choose = c("z","y","x","y","z"))
testdt[,selectedValue := get(choose), by = choose]
testdt
#>    x  y   z choose selectedValue
#> 1: 1 11 101      z           101
#> 2: 2 12 102      y            12
#> 3: 3 13 103      x             3
#> 4: 4 14 104      y            14
#> 5: 5 15 105      z           105

Created on 2019-09-17 by the reprex package (v0.3.0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R dplyr 从具有列名称的列中选择值以在单独的列中选择 的相关文章

随机推荐