Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据R中的多个条件正确定义新列_R_If Statement_Mutate - Fatal编程技术网

如何根据R中的多个条件正确定义新列

如何根据R中的多个条件正确定义新列,r,if-statement,mutate,R,If Statement,Mutate,我的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 现在,我想在tabel的

我的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
现在,我想在tabel的基础上修改一个新的列,它对频率进行分类,即

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,依此类推。因此,我想要的新测试将是:

 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
我怎样才能做到干净呢

提前感谢

我们可以在此处使用findInterval或cut


看看dplyr::case_when。谢谢!我现在就去调查!而且效果很好,这也是我真正的问题。谢谢!我的公羊谢谢你
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(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