是否可以使用包含字符向量(字符串)的变量来命名 tibble 的列?

Lia*_*a_G 5 r dataframe tibble

有没有办法使用变量来命名 tibble 的列?Clade例如,我想命名下面的第一列。我尝试过paste()assign(),但这两个功能似乎都没有达到我想要的效果。

CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"

  metaDF = tibble(CLADE_FIELD = c("G"), 
                       LINEAGE_FIELD = c("B.666"), 
                       "Submission date" = c("2020-03"))
Run Code Online (Sandbox Code Playgroud)

我在单元测试中使用此代码,这就是我人为创建此 tibble 的原因。该名称引用了 csv 中的列名称,如果该列名称发生更改,我希望代码能够轻松维护。

Ano*_*n R 10

您可以使用以下解决方案:

  • 为了将列名存储为字符串,我们使用 bang bang 运算符!!,强制对其后续名称进行评估
  • 我们还需要使用 walrus:=而不是=等效的,并提示您在其上提供名称(与我们的变量名称相同)LHS(左侧)
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"

metaDF = tibble(!!CLADE_FIELD := c("G"), 
                !!LINEAGE_FIELD := c("B.666"), 
                "Submission date" = c("2020-03"))

# A tibble: 1 x 3
  Clade Lineage `Submission date`
  <chr> <chr>   <chr>            
1 G     B.666   2020-03 
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用双大括号,{{}}如下所示:

metaDF = tibble({{CLADE_FIELD}} := c("G"), 
                {{LINEAGE_FIELD}} := c("B.666"), 
                "Submission date" = c("2020-03"))

# A tibble: 1 x 3
  Clade Lineage `Submission date`
  <chr> <chr>   <chr>            
1 G     B.666   2020-03  
Run Code Online (Sandbox Code Playgroud)

或者我们可以利用glue语法将变量名称放在一对大括号内{},并将结果作为字符串传递。由于粘合语法在任何对象(这里是变量名)的 LHS 上可用,:=您放在大括号内的对象将被评估为 R 代码:

metaDF = tibble("{CLADE_FIELD}" := c("G"), 
                "{LINEAGE_FIELD}" := c("B.666"), 
                "Submission date" = c("2020-03"))

# A tibble: 1 x 3
  Clade Lineage `Submission date`
  <chr> <chr>   <chr>            
1 G     B.666   2020-03  
Run Code Online (Sandbox Code Playgroud)