【问题标题】:dplyr mutate replace dynamic variable name [duplicate]dplyr mutate 替换动态变量名 [重复]
【发布时间】:2015-08-24 23:40:56
【问题描述】:

以下代码将 hwy > 25 的值替换为 1,否则为 0。

library(ggplot2)
data(mpg)
mpg %>% mutate(hwybin=replace(hwy>25,1,0))

如何用 hwy 作为变量名进行替换。大致如下:

varname <- "hwy"
mpg %>% mutate(hwybin=replace(varname>25,1,0))

我觉得我错过了一些明显的东西。谢谢。

【问题讨论】:

  • 啊,是的,你是对的。数据是 ggplot2 包的一部分。
  • 那么,您到底想在这里做什么?您是否尝试动态创建名称hwybin?还是动态替换varname
  • 好的,我取消了我的答案。我想这就是你想要的
  • mpg %&gt;% mutate_(hwybin=interp(~replace(varname&gt;25, 1 ,0), varname = as.name(varname))) 应该这样做
  • 谢谢。这是我一直在寻找的答案。你能添加一个答案吗?

标签: r dplyr


【解决方案1】:

不妨将评论变成答案(并使您的问题可重现):

library(dplyr)
library(ggplot2)
library(lazyeval)

data(mpg)

a <- mpg %>% mutate(hwybin=replace(hwy>25, 1 ,0))

varname <- "hwy"
b <- mpg %>% mutate_(hwybin=interp(~replace(varname>25, 1 ,0),
                                   varname=as.name(varname)))

identical(a, b)
## [1] TRUE

【讨论】:

  • 后续问题。我将如何为重命名的列使用相同的 varname。即类似的东西。 mpg %>% mutate_(varname=interp(~replace(varname>25, 1 ,0), varname=as.name(varname)))
  • 这将是一个很好的后续(阅读:附加,新)问题!
  • stackoverflow.com/questions/32194070/… 发布了后续消息。谢谢。
【解决方案2】:

我会这样做:

library(data.table)
mybin <- function(DF,var,thresh,suffix="bin")
  DF %>% mutate(x = + ( .[[var]] > thresh )) %>% setnames("x", paste0(var,suffix)) %>% `[`

mpg %>% mybin("hwy",25)

我确定有一些 dplyr 风格的替代 data.table 的 setnames,但我不知道。

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 2019-01-21
    • 2020-09-14
    • 2016-11-15
    • 2018-11-11
    • 1970-01-01
    • 2021-08-25
    • 2020-10-14
    • 2021-10-22
    相关资源
    最近更新 更多