【问题标题】:use a variable instead of variable name with dplyr [duplicate]在 dplyr 中使用变量而不是变量名 [重复]
【发布时间】:2020-10-16 17:01:15
【问题描述】:

我有一个 df :

v1 <- c(100, 20, 5, 30)
v2 <- c(10, 13, 2, 30)
v3 <- c(10, 200, 5, 300)
df <- data.frame(v1, v2, v3)


  v1 v2  v3
  1 100 10  10
  2  20 13 200
  3   5  2   5
  4  30 30 300

我不想直接在 dplyr 中使用列名,而是引用存储在变量中的列名(我可以在整个程序中轻松更改它。这个变量称为column_used。 在我的示例中,column_usedv1

column_used <- "v1"

我想使用这个变量 mut 它不起作用:

df %>%
mutate(taux = (column_used/ 100)) 

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    column_used 只是一个字符串,您需要将其转换为符号(即表示它不是字符串,而是变量/列名)。

    你可以做到这一点,例如通过使用来自baseas.name()sym()get() 和来自!!!! 运算符:

    # get()
    df %>%
        mutate(taux = get(column_used) / 100)
    
    # !!as.name()
    df %>%
        mutate(taux = !!as.name(column_used) / 100)
    
    # !!sym()
    df %>%
        mutate(taux = !!sym(column_used) / 100)
    

    【讨论】:

      【解决方案2】:

      使用dplyr,这里有两个选项:

      library(dplyr)
      df %>% mutate(taux = !!sym(column_used)/ 100)
      

      或者

      df %>% mutate(taux = .data[[column_used]]/100)
      
      #   v1 v2  v3 taux
      #1 100 10  10 1.00
      #2  20 13 200 0.20
      #3   5  2   5 0.05
      #4  30 30 300 0.30
      

      在基础 R 中,您可以这样做:

      df$taux <- df[[column_used]]/100
      

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        相关资源
        最近更新 更多