【问题标题】:Finding the min and max Julian day and then the difference of those two找到最小和最大儒略日,然后找到这两者的差异
【发布时间】:2021-01-30 01:21:14
【问题描述】:

我正在尝试计算我的数据集中的平均开花持续时间。首先,我想找到记录每个小区中每个物种开花的最小和最大儒略日,并计算这两个数字的差异。

dput(phen_flwr1[525:575,])
structure(list(site = c("kbs", "kbs", "kbs", "kbs", "kbs", "kbs", 
"kbs", "kbs", "kbs", "kbs", "kbs", "kbs", "kbs", "kbs", "kbs", 
"kbs", "kbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs"), plot = c("A6", "D4", "A3", "A6", 
"A1", "A6", "B1", "C5", "B3", "A5", "B4", "C5", "A5", "D4", "A4", 
"C6", "C2", "B2", "B2", "B2", "B2", "B2", "B2", "D2", "D2", "D2", 
"D2", "D2", "D2", "B4", "A4", "C2", "C2", "D2", "C2", "C2", "C2", 
"C2", "C2", "C2", "C2", "C2", "C2", "C2", "C2", "D2", "D2", "C2", 
"D2", "C2", "D2"), species = c("Acmi", "Acmi", "Acmi", "Acmi", 
"Acmi", "Acmi", "Acmi", "Acmi", "Acmi", "Acmi", "Acmi", "Acmi", 
"Acmi", "Acmi", "Acmi", "Acmi", "Acmi", "Acru", "Acru", "Acru", 
"Acru", "Acru", "Acru", "Anma", "Anma", "Anma", "Anma", "Anma", 
"Anma", "Ansp", "Ansp", "Apan", "Apan", "Apan", "Apan", "Apan", 
"Apan", "Apan", "Apan", "Apan", "Apan", "Apan", "Apan", "Apan", 
"Apan", "Apan", "Apan", "Apan", "Apan", "Apan", "Apan"), action = c("flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower", "flower", "flower", "flower", "flower", "flower", "flower", 
"flower"), date = c("2018-06-14", "2019-08-03", "2017-06-29", 
"2018-07-01", "2016-07-26", "2017-06-23", "2016-07-14", "2017-06-23", 
"2017-06-18", "2016-06-26", "2017-06-12", "2017-06-18", "2017-07-03", 
"2016-07-23", "2015-07-21", "2016-07-29", "2020-07-07", "2017-05-28", 
"2017-05-30", "2017-06-05", "2017-06-03", "2017-06-01", "2017-06-07", 
"2018-09-11", "2018-08-30", "2018-09-05", "2018-09-14", "2018-09-08", 
"2018-09-02", "2017-05-28", "2017-05-17", "2020-07-31", "2019-07-21", 
"2020-07-12", "2020-08-04", "2020-07-16", "2018-07-10", "2019-07-15", 
"2019-07-18", "2020-08-14", "2020-08-07", "2018-07-04", "2020-07-12", 
"2020-07-19", "2018-06-22", "2020-07-06", "2020-07-19", "2020-07-28", 
"2020-07-09", "2018-07-07", "2020-06-24"), julian = c(165L, 215L, 
180L, 182L, 208L, 174L, 196L, 174L, 169L, 178L, 163L, 169L, 184L, 
205L, 202L, 211L, 189L, 148L, 150L, 156L, 154L, 152L, 158L, 254L, 
242L, 248L, 257L, 251L, 245L, 148L, 137L, 213L, 202L, 194L, 217L, 
198L, 191L, 196L, 199L, 227L, 220L, 185L, 194L, 201L, 173L, 188L, 
201L, 210L, 191L, 188L, 176L), year = c(2018L, 2019L, 2017L, 
2018L, 2016L, 2017L, 2016L, 2017L, 2017L, 2016L, 2017L, 2017L, 
2017L, 2016L, 2015L, 2016L, 2020L, 2017L, 2017L, 2017L, 2017L, 
2017L, 2017L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2017L, 
2017L, 2020L, 2019L, 2020L, 2020L, 2020L, 2018L, 2019L, 2019L, 
2020L, 2020L, 2018L, 2020L, 2020L, 2018L, 2020L, 2020L, 2020L, 
2020L, 2018L, 2020L), state = c("ambient", "ambient", "ambient", 
"ambient", "ambient", "ambient", "ambient", "ambient", "warmed", 
"warmed", "ambient", "ambient", "warmed", "ambient", "warmed", 
"warmed", "ambient", "warmed", "warmed", "warmed", "warmed", 
"warmed", "warmed", "warmed", "warmed", "warmed", "warmed", "warmed", 
"warmed", "ambient", "warmed", "ambient", "ambient", "warmed", 
"ambient", "ambient", "ambient", "ambient", "ambient", "ambient", 
"ambient", "ambient", "ambient", "ambient", "ambient", "warmed", 
"warmed", "ambient", "warmed", "ambient", "warmed")), row.names = c(757L, 
759L, 760L, 761L, 762L, 763L, 765L, 766L, 767L, 768L, 769L, 770L, 
771L, 772L, 773L, 774L, 775L, 776L, 777L, 778L, 779L, 780L, 781L, 
782L, 783L, 784L, 787L, 788L, 790L, 791L, 792L, 794L, 795L, 797L, 
799L, 800L, 801L, 805L, 806L, 814L, 821L, 822L, 823L, 825L, 826L, 
828L, 830L, 832L, 833L, 834L, 840L), class = "data.frame")

我尝试使用 count()aggregate() 函数,但没有成功。老实说,我不确定从哪里开始。

sum_flwr_duration <- phen_flwr1 %>% 
        group_by(site, plot, species, julian) %>% 
        summarise(aggregate(duration ~ Julian + species, FUN = mean))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以试试:

    library(dplyr)
    
    phen_flwr1 %>% 
      group_by(site, plot, species) %>%
      summarise(result = max(julian) - min(julian))
      #summarise(result = diff(range(julian)))
    
    #   site  plot  species result
    #   <chr> <chr> <chr>    <int>
    # 1 kbs   A1    Acmi         0
    # 2 kbs   A3    Acmi         0
    # 3 kbs   A4    Acmi         0
    # 4 kbs   A5    Acmi         6
    # 5 kbs   A6    Acmi        17
    # 6 kbs   B1    Acmi         0
    # 7 kbs   B3    Acmi         0
    # 8 kbs   B4    Acmi         0
    # 9 kbs   C2    Acmi         0
    #10 kbs   C5    Acmi         5
    #11 kbs   C6    Acmi         0
    #12 kbs   D4    Acmi        10
    #13 umbs  A4    Ansp         0
    #14 umbs  B2    Acru        10
    #15 umbs  B4    Ansp         0
    #16 umbs  C2    Apan        54
    #17 umbs  D2    Anma        15
    #18 umbs  D2    Apan        25
    

    这也可以写成base R和data.table

    #Base R
    aggregate(julian~site + plot+species, phen_flwr1, function(x) diff(range(x)))
    
    #data.table
    library(data.table)
    setDT(df)[, .(result = max(julian) - min(julian)), .(site, plot, species)]
    

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多