从 function 里面 across 访问新的列名
Access to the new column name from the function inside across
是否可以从 across
函数中获取新列的名称?
例如
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) if("new column name"=="b") a+1 else a+0.5))
预期结果:
#> a b c
#> 1 1 2 1.5
由 reprex package (v2.0.0)
于 2021-12-09 创建
我尝试使用 cur_column()
,但在本例中它的 return 值似乎是 a
。
很抱歉,这个例子太简单了,无法通过其他方式实现预期的结果,但我的实际代码是一个很难提供的大型嵌套数据框。
有趣的问题。似乎因为您在 across
调用中定义了 b
和 c
,所以它们无法通过 cur_column()
.
获得
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) print(cur_column())))
#> [1] "a"
#> [1] "a"
如果它们已在 data.frame
中定义,则可以正常工作。在这里使用 tibble()
这样我就可以在构造函数中引用 a
。
tibble(a=1, b=a, c=a) %>%
mutate(across(-a, ~ if (cur_column() == "b") .x + 1 else .x + 0.5))
#> # A tibble: 1 × 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 1 2 1.5
即使您在同一个 mutate()
调用中也同样有效,只需确保在 across()
.[=30= 之前定义 b
和 c
]
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), ~.x),
across(-a, ~ if (cur_column() == "b") .x + 1 else .x + 0.5))
#> a b c
#> 1 1 2 1.5
我相信它正在发生,因为 across
在 rhs
(a
) 上工作,并且只将值分配给 lhs
(b
)应用 across()
中的函数后。我不确定这是预期的行为(虽然它看起来确实是正确的),我实际上不知道,所以会打开一个 GitHub 问题,因为我认为这是一个有趣的例子!
是否可以从 across
函数中获取新列的名称?
例如
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) if("new column name"=="b") a+1 else a+0.5))
预期结果:
#> a b c
#> 1 1 2 1.5
由 reprex package (v2.0.0)
于 2021-12-09 创建我尝试使用 cur_column()
,但在本例中它的 return 值似乎是 a
。
很抱歉,这个例子太简单了,无法通过其他方式实现预期的结果,但我的实际代码是一个很难提供的大型嵌套数据框。
有趣的问题。似乎因为您在 across
调用中定义了 b
和 c
,所以它们无法通过 cur_column()
.
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) print(cur_column())))
#> [1] "a"
#> [1] "a"
如果它们已在 data.frame
中定义,则可以正常工作。在这里使用 tibble()
这样我就可以在构造函数中引用 a
。
tibble(a=1, b=a, c=a) %>%
mutate(across(-a, ~ if (cur_column() == "b") .x + 1 else .x + 0.5))
#> # A tibble: 1 × 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 1 2 1.5
即使您在同一个 mutate()
调用中也同样有效,只需确保在 across()
.[=30= 之前定义 b
和 c
]
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), ~.x),
across(-a, ~ if (cur_column() == "b") .x + 1 else .x + 0.5))
#> a b c
#> 1 1 2 1.5
我相信它正在发生,因为 across
在 rhs
(a
) 上工作,并且只将值分配给 lhs
(b
)应用 across()
中的函数后。我不确定这是预期的行为(虽然它看起来确实是正确的),我实际上不知道,所以会打开一个 GitHub 问题,因为我认为这是一个有趣的例子!