如何基于多个条件将数据帧分为组

时间:2019-05-25 09:45:30

标签: r

我正在分析一些库存数据,并且已经计算出每种股票的非流动性度量(同上)。现在,我想根据此非流动性度量从我的股票中为数据集中的每个月创建投资组合。

我已经研究过split()函数,但没有找到每月分割数据的方法。

这是我的数据集的一个示例。我在此样本后面有一个大数据集(22.000.000行,包含30年的库存数据)。

import re
match = re.search("(public|protected|private|static) .*\((.*)\)", source_code)
args=[i.split()[-1] for i in re.sub('<.*?>','',match[2]).split(',')]
print(args)

我想基于cit-measure来创建每个月的股票数据投资组合。从最低到最高cit,并为每个投资组合计算平均cit。 预期结果如下:

         date cit
1  1990-01-01   1
2  1990-01-01   2
3  1990-01-01   3
4  1990-01-01   4
5  1990-01-01   5
6  1990-01-01   6
7  1990-01-01   7
8  1990-01-01   8
9  1990-01-01   9
10 1990-01-01  10
11 1990-02-01  11
12 1990-02-01  12
13 1990-02-01  13
14 1990-02-01  14
15 1990-02-01  15
16 1990-02-01  16
17 1990-02-01  17
18 1990-02-01  18
19 1990-02-01  19
20 1990-02-01  20

任何帮助将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:1)

此解决方案没有什么好处,但也许有帮助,lubridate软件包可用于提取月份以拆分数据。

library(tidyverse);library(magrittr);library(lubridate)
df <- list("date" = c(rep("1990-01-01",10),rep("1990-02-01",10)),
              "cit"=1:20) %>% as.data.frame()
df$date %<>% as.Date()

df.res <-
    split(df, df$date) %>%
        map_df(~{
            .x %>% 
            mutate(portfolio = cut(cit, breaks = 5, labels = 1:5)) %>%
            group_by(portfolio) %>% 
            summarise(meanCit = mean(cit)) %>%
            transmute(year= year(.x$date)[1],
                   month= month(.x$date)[1],
                   meanCit,
                   portfolio)
            })

df.res