gpt4 book ai didi

r - dplyr 包可以用于条件变异吗?

转载 作者:行者123 更新时间:2023-12-03 04:19:11 25 4
gpt4 key购买 nike

当变异是有条件的(取决于某些列值的值)时,可以使用变异吗?

这个例子有助于说明我的意思。

structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4, 
2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4,
5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4,
2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA,
8L), class = "data.frame")

a b c d e f
1 1 1 6 6 1 2
2 3 3 3 2 2 3
3 4 4 6 4 4 4
4 6 2 5 5 5 2
5 3 6 3 3 6 2
6 2 7 6 7 7 7
7 5 2 5 2 6 5
8 1 6 3 6 3 2

我希望使用 dplyr 包找到解决我的问题的方法(是的,我知道这不是应该工作的代码,但我想它使目的明确)来创建新列 g:

 library(dplyr)
df <- mutate(df,
if (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)){g = 2},
if (a == 0 | a == 1 | a == 4 | a == 3 | c == 4) {g = 3})

我正在寻找的代码的结果应该在这个特定示例中具有以下结果:

  a b c d e f  g
1 1 1 6 6 1 2 3
2 3 3 3 2 2 3 3
3 4 4 6 4 4 4 3
4 6 2 5 5 5 2 NA
5 3 6 3 3 6 2 NA
6 2 7 6 7 7 7 2
7 5 2 5 2 6 5 2
8 1 6 3 6 3 2 3

有人知道如何在 dplyr 中执行此操作吗?这个数据框只是一个例子,我正在处理的数据框要大得多。由于它的速度,我尝试使用 dplyr,但也许还有其他更好的方法来处理这个问题?

最佳答案

使用ifelse

df %>%
mutate(g = ifelse(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
ifelse(a == 0 | a == 1 | a == 4 | a == 3 | c == 4, 3, NA)))

添加 - if_else: 请注意,在 dplyr 0.5 中定义了一个 if_else 函数,因此替代方法是将 ifelse 替换为 if_else;但是,请注意,由于 if_elseifelse 更严格(条件的两条腿必须具有相同的类型),因此在这种情况下 NA 将必须替换为 NA_real_

df %>%
mutate(g = if_else(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
if_else(a == 0 | a == 1 | a == 4 | a == 3 | c == 4, 3, NA_real_)))

添加 - case_when 由于发布了此问题,dplyr 已添加 case_when,因此另一种选择是:

df %>% mutate(g = case_when(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4) ~ 2,
a == 0 | a == 1 | a == 4 | a == 3 | c == 4 ~ 3,
TRUE ~ NA_real_))

添加 - 算术/na_if 如果值是数字并且条件(最后的 NA 默认值除外)是互斥的,就像问题中的情况一样,那么我们可以使用算术表达式,将每一项乘以所需的结果,并在末尾使用 na_if 将 0 替换为 NA。

df %>%
mutate(g = 2 * (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)) +
3 * (a == 0 | a == 1 | a == 4 | a == 3 | c == 4),
g = na_if(g, 0))

关于r - dplyr 包可以用于条件变异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459752/

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