假设我有下表:
df <- data.frame(
a1 = 1:5,
b1 = as.character(1:5),
c = 1:5
)
> df
a1 b1 c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
我想修改名称以“1”结尾且为数字的列(即仅 a1
而不是 c
)。我试图在 mutate(across(where...
) 中询问这个双重条件,但没有成功。有关列名称的条件被排除。
以下脚本同时修改 a1
和 c
。
df %>%
mutate(
across(
where(~ ends_with('1') && is.numeric(.)),
~ .x * 2
))
最佳答案
您不需要使用 where()
来进行名称测试函数,例如 ends_with()
。您可以使用
df %>%
mutate(
across(
ends_with('1') & where(is.numeric),
~ .x * 2
))
# a1 b1 c
# 1 1 1 1
# 2 2 2 2
# 3 3 3 3
# 4 4 4 4
# 5 5 5 5
还要小心 &&
,它仅用于长度为 1 的输入,您需要使用 &
进行矢量化。
关于r - 使用 2 个条件进行变异,第一个条件是变量名称,第二个条件是变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77440137/