2015-07-16 3 views
1

У меня есть data.frame как такИспользование «если» заявление в data.frame использовании 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_by(Letter).

Я хотел бы написать, если заявление, в котором говорится, если

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 

ответ

2

Вы можете использовать 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_] 
Смежные вопросы