【问题标题】:Using an 'if' statement in data.frame using dplyr使用 dplyr 在 data.frame 中使用“if”语句
【发布时间】:2015-07-16 15:16:41
【问题描述】:

我有一个这样的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 

那么字母的最大数量的比率将是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

【问题讨论】:

    标签: r if-statement dataframe dplyr


    【解决方案1】:

    您可以将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_]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2012-01-29
      • 2014-09-30
      • 2021-07-16
      • 2018-09-16
      • 2015-12-15
      • 2015-09-28
      相关资源
      最近更新 更多