【问题标题】:Generating dataframe with argument as column name & Selecting column based on argument使用参数作为列名生成数据框并根据参数选择列
【发布时间】:2021-04-28 19:40:47
【问题描述】:

我在争论方面遇到了一些挑战。有人可以帮助我吗?非常感谢!

argument_a <- “GID”
  1. 如何使用参数定义的列名创建一个空数据框。下面的这个例子显然行不通,但可以帮助你理解我想要实现的目标。我希望 df 的列名是“GID”:
df <- data.frame( argument_a = character())
  1. 如何选择基于列值的参数。下面的这个例子显然行不通,但可以帮助你理解我想要实现的目标。我希望遍历 GID_a、GID_b 和 GID_c
df <- data.frame(GID =  c('GID_a','GID_b','GID_c'))

for (i in list(unique(df$argument_a))){}

【问题讨论】:

  • 创建一个空的数据框很少(从不)有用。你为什么要这样做?可能有更好的方法来实现您的总体目标,但我们需要更多的背景信息。一个完整且可重复的示例以及预期的输出将有助于理解您想要做什么。

标签: r dataframe loops arguments parameter-passing


【解决方案1】:

对于您问题的第一部分,我会进行一些非标准评估。基本上,您想要评估argument_a,然后创建数据框(这样列就不会得到变量的名称,如argument_a)。我无法让它与基本 data.frame 一起使用,但它可以与 tibble 一起使用:

library(rlang)
library(tibble)

argument_a <- "GID"

df <- tibble(!!argument_a := character())

!! ("bang-bang") 这里计算argument_a,因此该列以argument_a ("GID") 的值命名。在 := 之后需要这个运算符,称为 Walrus 运算符,因为您在赋值的左侧进行评估。

对于第 2 部分,我只使用括号来索引而不是 $。

df <- data.frame(GID = c('GID_a','GID_b','GID_c'))

for (i in list(unique(df[[argument_a]]))){

     print(i)
 }

Advanced R metaprogramming section 中对这些概念进行了非常有用的概述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多