【问题标题】:Use of gather() in a loop, "key" and "value" as a variable在循环中使用gather(),“key”和“value”作为变量
【发布时间】:2019-08-27 14:56:35
【问题描述】:

我喜欢在循环中使用gather(),其中gather() keyvalue 的输入值是一个变量。这可能吗?

我还尝试使用标准变量 gather()(设置在循环之外,没有索引),但不起作用。

因此,我认为,根据 _gather()_ 的定义,不可能将 keyvalue 分配给变量。

在我在 keyvalue 上找到的文档中:

"...请注意,这种符号不代表实际对象的界面..."

我想这就是答案。 但我不确定。

gather(Fragenummern.FB[i], Fragenummern.FI[i], 
       key = keyVar[i], value = ValueVar[i])  

错误:必须提供符号或字符串作为参数

致电rlang::last_error()查看回溯

【问题讨论】:

  • Fragenummern.FB[i] 是什么,它是数据吗?它是否存储为字符串?
  • 不清楚,请用一个可重现的小例子更新
  • 它是一个向量,包含要处理的数据框的列名。
  • 抱歉,data 标识符在哪里
  • 如果数据集位于list 中,请使用[[ 代替[ 对列表元素进行子集化

标签: r tidyr


【解决方案1】:

我认为您可以使用dplyr::gatherrlang 命令来实现这一点。在此示例中,您有您的 df、一个包含您想要 gatherdf 中的一些变量名称的向量,以及一个新收集的变量名称的向量。

df <- data.frame(matrix(runif(260),ncol = 26))
names(df) <- letters

to_gather <- sample(letters,5)
new_names <- c('letter','value')

df %>% gather(key = !!new_names[1], value = !!new_names[2], enexpr(to_gather))

您可以循环并根据要收集的不同变量子集创建多个新数据框。

lapply(1:2, function(x){
  to_gather <- sample(letters,5)
  df %>% gather(key = !!new_names[1], value = !!new_names[2], enexpr(to_gather))
  })

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2015-05-20
    • 2023-02-05
    • 2021-12-12
    相关资源
    最近更新 更多