gpt4 book ai didi

r - 使用dplyr将所有编码为 "Y"/"N"的变量转换为TRUE/FALSE

转载 作者:行者123 更新时间:2023-12-02 05:58:26 25 4
gpt4 key购买 nike

我有以下数据

df <- data.frame(A = 1:3, YN_B = c('Y', 'N', 'N'), YN_C = c('N', 'N', 'Y'))

这些在 c('Y', 'N') 中取值的变量对我来说不是很有用。将它们编码为 TRUE 表示“Y”,FALSE 表示“N”会更有用。有用的是,Y/N 列的命名方式使我能够以编程方式找到它们。我认为 mutate_if 在这种情况下应该有所帮助。

我正在尝试使用 mutate_if 来实现此目的,我以前从未使用过它,但效果不佳。这是我的尝试

df %>% mutate_if(matches('^YN'), .funs = funs(function(x) x == 'Y'))
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'p' of mode 'function' was not found

我哪里错了?

最佳答案

matches 返回指定列位置的整数,但是,mutate_if 需要 bool 值作为谓词。为了使用 matches,您可以使用 mutate_at 代替:

library(dplyr)
df %>% mutate_at(vars(matches('^YN')), funs(. == 'Y'))
# A YN_B YN_C
# 1 1 TRUE FALSE
# 2 2 FALSE FALSE
# 3 3 FALSE TRUE

这是匹配如何工作的例子:

matches('^YN', vars = c("A", "YN_B"))
# [1] 2

在这里为mutate_if添加另一种情况,我们可以根据列类型来改变列:

lapply(df, class)
# $A
# [1] "numeric"

# $YN_B
# [1] "character"

# $YN_C
# [1] "character"

df %>% mutate_if(is.character, funs(. == 'Y'))
# A YN_B YN_C
# 1 1 TRUE FALSE
# 2 2 FALSE FALSE
# 3 3 FALSE TRUE

关于r - 使用dplyr将所有编码为 "Y"/"N"的变量转换为TRUE/FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618943/

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