gpt4 book ai didi

r - 如何在 mutate_if 中应用 ifelse 语句

转载 作者:行者123 更新时间:2023-12-04 10:36:58 24 4
gpt4 key购买 nike

我有超过 2000 列应该进行虚拟编码的数据。但是,偶尔会有值大于 1 的情况。所以,我想一次改变所有这些列并将大于 1 的任何内容转换为 1。这是前几列数据的片段列。

我试过使用 mutate_if我认为它仍然是我需要的最佳选择,因为我只需要 mutate数字“代码”列。但是,我无法正确使用语法...

    # the data
d <- tibble(
recordID = c("ID1", "ID2", "ID1", "ID4"),
personNumber = c("1", "1", "2", "1"),
code_1 = c(0, 0, 1, 1),
code_2 = c(0, 2, 0, 0), # this 2 should be a 1
code_3 = c(0, 0, 1, 2), # this 2 should be a 1
code_4 = c(0, 1, 0, 2) # this 2 should be a 1
)

# what it looks like
d
# A tibble: 4 x 6
recordID personNumber code_1 code_2 code_3 code_4
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 ID1 1 0 0 0 0
2 ID2 1 0 2 0 1 # this 2 should be a 1
3 ID1 2 1 0 1 0
4 ID4 1 1 0 3 2 # this 3 & 2 should be 1

这是我的尝试以及输出应该是什么样子:
    # my attempt
d %>%
mutate_if(is.numeric, ifelse(. >= 1, 1, 0)) # doesn't work


# what it should look like
d
# A tibble: 4 x 6
recordID personNumber code_1 code_2 code_3 code_4
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 ID1 1 0 0 0 0
2 ID2 1 0 1 0 1 # 2 has been replaced
3 ID1 2 1 0 1 0
4 ID4 1 1 0 1 1 # 3 & 2 have been replaced

最佳答案

在这种情况下,不需要使用 ifelse() .任何比较的结果都是一个 TRUE/FALSE 逻辑向量,然后可以转换为整数向量:

d %>%
mutate_if(is.numeric, ~ +(. >= 1))

recordID personNumber code_1 code_2 code_3 code_4
<chr> <chr> <int> <int> <int> <int>
1 ID1 1 0 0 0 0
2 ID2 1 0 1 0 1
3 ID1 2 1 0 1 0
4 ID4 1 1 0 1 1

或者:
d %>%
mutate_if(is.numeric, ~ (. >= 1) * 1)

关于r - 如何在 mutate_if 中应用 ifelse 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466584/

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