首页 > 解决方案 > 检查A列中的数值是否存在于r中B列和C列中2个数值之间的范围内

问题描述

我想检查 A 列中的数值是否存在于 r 中 B 列和 C 列中 2 个数值之间的范围内。

这是起始数据集:

# dataset with values
numerical_values_dataset <- 
  data.frame(
    A = c("0.798963315", "0.160710819", "0.247170125", "-0.910092611", "0.42959469", "0.710921651", "0.160710819"),
    B = c("0.321418973", "0.710921651", "0.910092611", "0.42959469", "0.42959469", "0.42959469", "0.160710819"),
    C = c("0.812661261", "0.146377668", "0.42959469", "0.710921651", "0.710921651", "0.710921651", "0.160710819")
  )

> numerical_values_dataset
             A           B           C
1  0.798963315 0.321418973 0.812661261
2  0.160710819 0.710921651 0.146377668
3  0.247170125 0.910092611  0.42959469
4 -0.910092611  0.42959469 0.710921651
5   0.42959469  0.42959469 0.710921651
6  0.710921651  0.42959469 0.710921651
7  0.160710819 0.160710819 0.160710819

我至少想得到至少对应的结果Ranges_status_yes_no,并且得到“Ranges_status_specific”会很好。

# result Ranges_status_yes_no
Ranges_status_yes_no <- data.frame(Ranges_status_yes_no = c("yes", "yes", "no", "no", "yes", "yes", "yes"))

# result Ranges_status_specific
numerical_values_dataset$Ranges_status_specific <- c("A is between B and C", "A is between B and C", "A is less than B", "A is less than B", "A is equal to B", "A is equal to C", "A is equal to B and C")

> numerical_values_dataset
             A           B           C Ranges_status_yes_no Ranges_status_specific
1  0.798963315 0.321418973 0.812661261                  yes   A is between B and C
2  0.160710819 0.710921651 0.146377668                  yes   A is between B and C
3  0.247170125 0.910092611  0.42959469                   no       A is less than B
4 -0.910092611  0.42959469 0.710921651                   no       A is less than B
5   0.42959469  0.42959469 0.710921651                  yes        A is equal to B
6  0.710921651  0.42959469 0.710921651                  yes        A is equal to C
7  0.160710819 0.160710819 0.160710819                  yes  A is equal to B and C

我想可以使用长ifelse()语句生成这些结果。但是有没有办法以其他方式做到这一点?

非常感谢任何帮助,甚至是部分答案。

标签: rif-statementrangelogic

解决方案


我们可以用

 numerical_values_dataset %>%
       mutate(Ranges_status_specific = case_when(Ranges_status_yes_no == 'no' ~ 'A is less than B',
      
       A <= B & C >= A ~ 'A is between B and C',
       A == 'B' & A != 'C' ~ 'A is equal to B',
       A == 'C' & A != 'B' ~ 'A is equal to 'B',
       TRUE ~ 'A is equal to B and C'))

           

推荐阅读