使用列名更改 tibble 中的值
Change value in place in a tibble using column names
我正在尝试使用函数更改某个地方的 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 列中的第二个值。
谢谢
仁儿
如果您将 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
我正在尝试使用函数更改某个地方的 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 列中的第二个值。
谢谢 仁儿
如果您将 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