使用dplyr在data.frame中使用'if'语句

时间:2015-07-16 15:16:41

标签: r if-statement dataframe dplyr

我有一个像这样的data.frame

Letter Number Type        Ratio
A        10    Plant        6        
A        11    Person       65
B        9     Fungus       32
B        10    Bacteria     344
C        13    Bacteria     2
C        15    Bacteria     3

我使用过的df %>% group_by(Letter)

我想写一个if语句,说明是否

max(number)-min(number) ==1 

然后是Letter的最大数量比率NA。 换句话说,如果两个数字是连续的,我希望较高数字的比率为NA,而另一个数字保持不变。 这是我的预期输出:

Letter Number Type        Ratio
A        10    Plant        6        
A        11    Person       N/A
B        9     Fungus       32
B        10    Bacteria     N/A
C        13    Bacteria     2
C        15    Bacteria     3

1 个答案:

答案 0 :(得分:2)

您可以将ifelsemutate

一起使用
 library(dplyr)
 df1 %>% 
   group_by(Letter) %>% 
   mutate(Ratio= ifelse(max(Number)-min(Number)==1 & 
                  Number==max(Number), NA_integer_, Ratio))
#  Letter Number     Type Ratio
#1      A     10    Plant     6
#2      A     11   Person    NA
#3      B      9   Fungus    32
#4      B     10 Bacteria    NA
#5      C     13 Bacteria     2
#6      C     15 Bacteria     3

或使用data.table

library(data.table)#v1.9.5+
indx <- setDT(df1)[, .I[(max(Number)-min(Number))==1 & 
                    Number==max(Number)] , by = Letter]$V1
df1[indx, Ratio:= NA_integer_]