使用';如果';使用dplyr的data.frame中的语句

使用';如果';使用dplyr的data.frame中的语句,r,if-statement,dataframe,dplyr,R,If Statement,Dataframe,Dplyr,我有一个这样的数据框 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

我有一个这样的数据框

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%>%groupby(字母)

我想写一个if语句,说明

max(number)-min(number) ==1 
然后,该字母的最大数字的比率将是
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

您可以将
ifelse
mutate

 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_]
library(data.table)#v1.9.5+
indx