在 lag() 中将字符串作为列名传递

Posted

技术标签:

【中文标题】在 lag() 中将字符串作为列名传递【英文标题】:Passing string as column name in lag() 【发布时间】:2022-01-18 08:48:26 【问题描述】:

我需要使用函数 lag() 来获取数据框中的新列,但在循环中。因此,列名作为字符串给出。当我这样做时,我只会得到 NA。请参阅下面一个非常简化且可重现的示例。我删除了循环,因为它不相关。

df <- 
  data.frame(age = c(1, 2, 3),
             value_2010 = c(10, 20, 30))

new_col_value <- "value_2010"
new_col_name <- "value_lag"

df_new_column <-
  df%>%
  mutate(new_col_name := lag(new_col_value))

这就是我想要的

这就是我得到的

【问题讨论】:

【参考方案1】:

您可以使用!! 代替

df %>%
  mutate(!!new_col_name := lag(!!as.symbol(new_col_value)))

  age value_2010 value_lag
1   1         10        NA
2   2         20        10
3   3         30        20

【讨论】:

我以为 dplyr v.1.0 支持使用 。见***.com/questions/26003574/… @ungatoverde 我想我应该使用,但这次,1.0.7 版,!! 适合我。 好的。谢谢。这很有趣,因为实际上new_col_name:= 工作正常。但由于某种原因, 不能在延迟内工作。可能缺少延迟更新。 @ungatoverde 是的,new_col_name 工作正常,但正如你所说,lag 函数可能存在问题,它与链接中的 mean 一起工作。 @ungatoverde 如果将其包装在函数中,则可以使用。 f = \(df, col) df %&gt;% mutate("col_lag" := lag( col )),然后是 f(df, value_2010)enquo(x) !!x 的简写 `

以上是关于在 lag() 中将字符串作为列名传递的主要内容,如果未能解决你的问题,请参考以下文章

如何在Nodejs中将字符串作为读取流对象传递?

如何在 FreeMarker 中将字符串作为输入传递? [复制]

在 dplyr 动词中将字符串作为参数传递

如何在存储库方法中将完整查询作为字符串作为参数传递并与@Query Annotation 一起使用?

如何在javascript中将字符串值作为引用传递并在那里进行更改

在 COM 互操作方法中将字符串作为参数传递