gpt4 book ai didi

r - dplyr::mutate_if() 具有多个条件,包括列类不起作用

转载 作者:行者123 更新时间:2023-12-02 18:13:02 24 4
gpt4 key购买 nike

真的很困惑为什么这不起作用:

df <- data.frame(a = c("1", "2", "3"),
b = c(2, 3, 4),
c = c(4, 3, 2),
d = c("1", "5", "9"))

varnames = c("a", "c")

df %>%
mutate_if((is.character(.) & names(.) %in% varnames),
funs(mean(as.numeric(.))))
a b c d
1 1 2 4 1
2 2 3 3 5
3 3 4 2 9

预期的输出是

  a b c d
1 2 2 4 1
2 2 3 3 5
3 2 4 2 9

它适用于单一条件,但我实际上只能使用这个公式来处理类条件(我不知道如何与列名条件结合使用):

df %>% 
mutate_if(function(col) is.character(col),
funs(mean(as.numeric(.))))
a b c d
1 2 2 4 5
2 2 3 3 5
3 2 4 2 5

但是 is.factor 似乎可以很好地处理列名?

df %>% 
mutate_if(!is.factor(.) & (names(.) %in% varnames),
funs(mean(as.numeric(.))))
a b c d
1 2 2 3 1
2 2 3 3 5
3 2 4 3 9

最佳答案

请注意,mutate_if 正在逐步淘汰,取而代之的是 across,因此以下内容可能是您想要的...

df %>% 
mutate(across(where(is.character) & matches(varnames), ~mean(as.numeric(.))))

a b c d
1 2 2 4 1
2 2 3 3 5
3 2 4 2 9

关于r - dplyr::mutate_if() 具有多个条件,包括列类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72016329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com