gpt4 book ai didi

r - 使用多个条件合并多个列

转载 作者:行者123 更新时间:2023-12-03 17:00:14 25 4
gpt4 key购买 nike

我正在尝试使用多个条件语句合并多个列。在下面的示例中,我想合并 A 优先于 B,然后是 C,其中 A >= 0.1 和 < 30,而 A 是 NA,< 0.1 或 > 30 我要合并 B 优先于 A,然后是C。

下面是一个示例数据集:

df <- data.frame(1:8)
df$A <- c(102, 0.04, 0.1, NA_real_, 0.01, 0.01, 0.2, NA_real_)
df$B <- c(20.2, 50.1, 10.1, 6.1, 7.1, NA_real_, 8.1, NA_real_)
df$C <- c(NA_real_, 4.1, NA_real_, NA_real_, NA_real_, 8.1, NA_real_, 10.1)


A B C
1 102 20.2 NA
2 0.04 50.1 4.1
3 0.1 10.1 NA
4 NA 6.1 NA
5 0.01 7.1 NA
6 0.01 NA 8.1
7 0.2 8.1 NA
8 NA NA 10.1

以下是所需的输出:
      A    B    C new_col
1 102 20.2 NA 20.2
2 0.04 50.1 4.1 50.1
3 0.1 10.1 NA 0.1
4 NA 6.1 NA 6.1
5 0.01 7.1 NA 7.1
6 0.01 NA 8.1 8.1
7 0.2 8.1 NA 0.2
8 NA NA 10.1 10.1

我尝试在下面的代码中使用 mutate 和合并函数来解决这个问题,但没有得到所需的输出(在许多情况下,只要 A 列中的值是一个值为 NA 的值,就可以正常工作,Nulls 在输出)。
df <- df %>% 
mutate(new_col = if_else(A >= 0.1 & A <= 30,
coalesce(A, B, C),
coalesce(B, A, C)))

A B C new_col
1 102 20.2 NA 20.2
2 0.04 50.1 4.1 50.1
3 0.1 10.1 NA 0.1
4 NA 6.1 NA NULL
5 0.01 7.1 NA 7.1
6 0.01 NA 8.1 0.01
7 0.2 8.1 NA 0.2
8 NA NA 10.1 NULL

最佳答案

您的尝试是正确的,但您需要处理 NANAif_else返回 NA .

library(dplyr)
df %>%
mutate(new_col = if_else(A >= 0.1 & A <= 30 & !is.na(A),
coalesce(A, B, C),
coalesce(B, A, C)))


# A B C new_col
#1 102.00 20.2 NA 20.20
#2 0.04 50.1 4.1 50.10
#3 0.10 10.1 NA 0.10
#4 NA 6.1 NA 6.10
#5 0.01 7.1 NA 7.10
#6 0.01 NA 8.1 0.01
#7 0.20 8.1 NA 0.20
#8 NA NA 10.1 10.10

数据
df <- data.frame(A = c(102, 0.04, 0.1, NA_real_, 0.01, 0.01, 0.2, NA_real_),
B = c(20.2, 50.1, 10.1, 6.1, 7.1, NA_real_, 8.1, NA_real_),
C = c(NA_real_, 4.1, NA_real_, NA_real_, NA_real_, 8.1, NA_real_, 10.1))

关于r - 使用多个条件合并多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62056989/

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