当前位置: 首页 > 知识库问答 >
问题:

使用“dplyr::mutate()”从向量中指定的名称创建几个新变量

桑思远
2023-03-14

我想在一个数据帧中创建几个新的空变量,并在向量中指定变量名。如果我只指定了一个变量名,这是可行的,但如果指定了几个,就不行了。我尝试了一些以前的解决方案,但它们似乎在这种情况下不起作用,例如:

    < li >不硬编码变量名的dplyr > < li >传递带有要变异的名称的向量以创建多个新列 < li>dplyr - mutate:使用动态变量
library(dplyr)

add_columns <- function(df, columns){
    columns <- quo(columns)
    mutate(df, !!columns := NA_character_)
}

columns <- c("x", "y")
iris %>% 
    add_columns(columns)

 Error: The LHS of `:=` must be a string or a symbol

期望的输出将是:

# A tibble: 150 x 7
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species x     y    
          <dbl>       <dbl>        <dbl>       <dbl> <fct>   <chr> <chr>
 1         5.10        3.50         1.40       0.200 setosa  NA    NA   
 2         4.90        3.00         1.40       0.200 setosa  NA    NA   
 3         4.70        3.20         1.30       0.200 setosa  NA    NA   
 4         4.60        3.10         1.50       0.200 setosa  NA    NA   
 5         5.00        3.60         1.40       0.200 setosa  NA    NA   
 6         5.40        3.90         1.70       0.400 setosa  NA    NA   
 7         4.60        3.40         1.40       0.300 setosa  NA    NA   
 8         5.00        3.40         1.50       0.200 setosa  NA    NA   
 9         4.40        2.90         1.40       0.200 setosa  NA    NA   
10         4.90        3.10         1.50       0.100 setosa  NA    NA   
# ... with 140 more rows

我想知道我如何能使这个工作?

共有1个答案

易星宇
2023-03-14

这里你不需要任何引号,因为你不是在处理带引号的表达式。只需创建具有适当名称的矢量并将它们拼接在一起。这里我使用了长度为1的向量被回收的事实,但是你也可以创建完整长度的向量:

add_columns <- function(df, columns){
  new <- rep(NA_character_, length(columns))
  names(new) <- columns
  mutate(df, !!!new)
}
 类似资料:
  • 我想在使用dplyr时动态创建变量名;不过,我也可以使用非DPLYR解决方案。 例如:

  • 我想从数据帧中提取一个变量名,并用dplyr::mutate创建一个新变量。我必须写什么才能接受通过“md$meta[1]”提供的变量名?我想这是直截了当的,但我还没能在网上找到答案。如有任何帮助,不胜感激!

  • 我想使用<code>dplyr::mutate()</code>在数据帧中创建多个新列。应动态生成列名及其内容。 来自iris的示例数据: 我创建了一个函数,可以从<code>Petal中修改我的新列。宽度变量: 现在我创建一个循环来构建我的列: 然而,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname),而不是四个(称为petal.2-petal.5

  • 我正在做一个分配,对于其中一个方法,我希望每次调用该方法时都创建一个新的arraylist。 下面是我的方法 } 当我试图创建一个与java.lang.String id变量同名的ArrayList时,我得到了一个错误。但是,每次调用此方法时,我都希望创建一个ArrayList,该ArrayList的名称是id唯一的,以便以后可以使用它。例如,如果id是“Steve”,我可以将arrayList称

  • 问题内容: 如何使用列表中的名称创建新变量?这个: 当然不行。我该怎么办? 我想做这个: 问题答案: 我认为更适合此目的: 但是,如果您仍然想即时创建变量,则可以使用:

  • 下面是我的可复制代码: 另外,我知道.dots可以接收矢量中的名称(我想),但我不太理解如何在mutate()中与case_when一起使用。 也欢迎使用recoded值创建新列的其他方法 更新:我的预期输出将是包含26个新列的原始数据帧,p1_cod:p26_cod,可能包含值1(如果正确)和0(如果不正确)。 类似这样的内容(我刚刚创建了4个列,其中有1和0作为示例)。