r - 使用名称向量和 dplyr::mutate 中的计算向量创建多个新变量

标签 r dataframe dplyr

我想创建几个新列。它们应该从一个向量中获取名称,并且应该通过获取数据中的一列并将其除以另一列来计算它们。

mytib <- tibble(id = 1:2, value1 = c(4,6), value2 = c(42, 5), total = c(2,2))
myvalues <- c("value1", "value2")
mynames  <- c("value1_percent", "value2_percent")

mytib %>%
     mutate({{ mynames }} := {{ myvalues }}/total)

在这里,我收到错误消息,这让我认为 curl 运算符放错了位置

Error in local_error_context(dots = dots, .index = i, mask = mask) : promise already under evaluation: recursive default argument reference or earlier problems?

我想以编程方式计算百分比列(因为我的数据中有很多这样的列)。

所需的输出应与此等效:

mytib %>%
    mutate( "value1_percent" = value1/total, "value2_percent" = value2/total)

这给出了

# A tibble: 2 × 6
     id value1 value2 total value1_percent value2_percent
  <int>  <dbl>  <dbl> <dbl>          <dbl>          <dbl>
1     1      4     42     2              2           21  
2     2      6      5     2              3            2.5

最佳答案

您可以使用 across 并在其 .names 参数中构造新名称:

library(dplyr)

mytib %>%
    mutate(across(starts_with('value'),
                  ~ .x / total,
                  .names = "{.col}_percent"
                  ))

关于r - 使用名称向量和 dplyr::mutate 中的计算向量创建多个新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72053806/

相关文章:

r - 错误包网格没有命名空间

r - ggplot2:如何裁剪出绘图顶部和底部的空白区域?

python - 选择 pandas DataFrame 中第一行的值

python - 如何使用 Pandas 将某些行视为新列

python-3.x - Python Jupyter Notebook 打印数据框边框

r - 编织者的自旋(): cannot embed inline R expression in a heading

r - 将指定的列转置为具有分组数据的行

r - 从 R 中的数据帧创建成对值的方阵

如果不适用,则通过粘贴第一行来重命名列

r - 跳过多个循环迭代