【问题标题】:Change value in place in a tibble using column names使用列名在小标题中更改值
【发布时间】:2020-12-20 11:29:07
【问题描述】:

我正在尝试使用函数更改某个地方的 tibble 列的值。但是,我不管理它。也许有人可以帮忙。我做了一个简单的可重现的例子:

noga2 <- tibble(a = c(1,12), b=c(12,3))
iot_test <- function(data, selcol) {
   data <- data %>%  mutate(UQ(selcol):= if_else(str_length((selcol)) == 2,"TA","0"))
   return(data)
}
iot_test(noga2, "a")

这是结果:

  a         b
 <chr> <dbl>
1 0        12
2 0         3

但我们的想法是只更改 a 列中的第二个值。

谢谢 伦格

【问题讨论】:

    标签: r tidyverse tidyeval


    【解决方案1】:

    如果您将ensym 作为字符传递,您可以在selcol 上使用它。然后,您需要一个双键来取消引用 selcol 的引用。

    noga2 <- tibble(a = c(1, 12), b = c(12, 3))
    
    iot_test <- function(data, selcol) {   
       selcol <- ensym(selcol)
       mutate(data, !!selcol := if_else(str_length(!!selcol) == 2, "TA", "0"))
    }
    
    iot_test(noga2, "a")
    #> # A tibble: 2 x 2
    #>   a         b
    #>   <chr> <dbl>
    #> 1 0        12
    #> 2 TA        3
    

    【讨论】:

    • 非常感谢!您甚至可以在通话中使用不带引号的 a。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2020-04-05
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多