我有一个像这样的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
答案 0 :(得分: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_]