首页 > 解决方案 > 在R中的数据框中使用条件对日期数据进行分组

问题描述

我有一个包含多个变量的 csv 文件,如下图所示(仅作为示例):

Region    crop      product    date_periode

A         aaaa      bilon      2016052q

A         aaaa      mailon     2016021q 

B         cccc      drox       2016042q

A         cccc      marob      2015081q

C         dddd      salon      2016062q

C         dddd      dilon      2016071q

D         aaaa      daxon      2015032q

D         aaaa      bayon      2016042q

日期是时期:20170502q:2017 年 5 月的后半部分,我想对每个作物和地区的个体进行分组,例如每次某个地区作物的日期的个体数量少于总数的 5%一个地区的作物具有相同日期的个人数量此日期与相邻日期分组(例如,如果我们将两个时期分组,则在这种情况下,日期可以变为 2016062q-2016071q),并且每个文化的每次在每个地区。例如,如果我们有这张表:

region    crop       date         Numbre of ID    % of ID

A         aaaa    20170201q         1             1

A         aaaa    20170202q        44            48

A         aaaa    20170301q        30            33

A         aaaa    20170302q        14            15

A         aaaa    20170401q         1             1

A         aaaa    20170402q         1             1

A         aaaa    20170601q         1             1

我想在分析后到达有这个

region      crop      date                    Number of ID      % of ID

A           aaaa      20170201q-20170202q         45              49

A           aaaa      20170301q                   30              33

A           aaaa      20170302q-20170601q         17              18 

我不知道我是否足够清楚,但如果您有任何上述问题,我就在这里,提前谢谢您

标签: rdataframegrouping

解决方案


使用tidyverse我们可以这样做:

df %>% 
group_by(Region, crop, date_periode) %>% 
summarise(number = n_distinct(product)) %>% 
ungroup() %>% 
left_join(  df %>% 
            group_by(Region, crop) %>% 
            summarise(number_t = n_distinct(product)) %>% 
            ungroup(), by = c("Region", "crop")) %>% 
mutate(Percent = number/number_t)

我想这就是你的意思?我假设Number是完全不同的product


推荐阅读