首页 > 解决方案 > 如何根据 R 中的多个条件正确定义新列

问题描述

我的 R 代码存在以下问题(我已经通过 12 个嵌套的 if else 语句修复了该问题,这是迄今为止不可取的)。由于我无法分享完整的代码和数据,我也遇到了类似的问题。假设我的数据集中有以下列,即频率

> test_df
  ID Frequency
1  1         1
2  2        56
3  3        34
4  4        22
5  5         9
6  6         8
7  7        50
8  8         7

现在,我想改变一个基于表格的新列,它对频率进行分类,即

htbl
  freq_interval category
1             6        A
2            18        B
3            20        C
4            30        D
5            40        E

现在,我想根据该表改变一个新列,方法如下:如果频率小于 6,则为新列赋予值“A”。如果频率小于 18 但大于 6,则为新列指定值“B”。如果频率小于 20 但大于 18,则给它值“C”,依此类推。所以,我想要的新 test_df 将是:

 ID Frequency mutated_column
1  1         1              A
2  2        56           <NA>
3  3        34              E
4  4        22              D
5  5         9              B
6  6         8              B
7  7        50           <NA>
8  8         7              B

我怎样才能干净地做到这一点?

提前致谢

标签: rif-statementdplyr

解决方案


我们可以使用findIntervalcut在这里

test_df$mutated_column <- htbl$category[findInterval(test_df$Frequency, 
                                        htbl$freq_interval) + 1]

test_df
#  ID Frequency mutated_column
#1  1         1              A
#2  2        56           <NA>
#3  3        34              E
#4  4        22              D
#5  5         9              B
#6  6         8              B
#7  7        50           <NA>
#8  8         7              B

cut这样就可以了

cut(test_df$Frequency, breaks = c(-Inf, htbl$freq_interval),labels = htbl$category)
#[1] A    <NA> E    D    B    B    <NA> B   
#Levels: A B C D E

推荐阅读