用于从 R 中具有特定条件的数据框中删除行的函数
Function to eliminate rows from a dataframe with certain condition in R
各位!
我会尽力解释我的问题。这对我来说很难。我希望你能帮助我:
我有一个数据框,我们称它为 DF1,它看起来像下一个:
|Symbol | Date | Volume | Price|
|----------------------------|-------|
|A |2014-01-01 | 0 | 4 |
|A |2014-01-02 | 7 | 7 |
|A |2014-01-03 | 8 | 9 |
|A |2014-01-04 | 1 | 5 |
|B |2014-01-01 |45 | 6 |
|B |2014-01-02 |0 | 11 |
|B |2014-01-03 |34 | 8 |
|B |2014-01-04 |45 | 5 |
|C |2014-01-01 |4 | 6 |
|C |2014-01-02 |0 | 5 |
|C |2014-01-03 |14 | 25 |
|D |2014-01-01 |31 | 4 |
|D |2014-01-02 |7 | 6 |
|D |2014-01-03 |18 | 3 |
|D |2014-01-04 |15 | 7 |
|E |2014-01-01 |13 | 8 |
|E |2014-01-02 |0 | 9 |
有了这个数据框,我通过以下代码行创建了一个新的数据框,我们称之为 DF2:
RM <- DF1 %>% group_by(Date) %>%
mutate(weight = Volume/sum(Volume),
R_i = weight*(log(Price)-log(lag(Price)))) %>%
summarise(RM = sum(R_i, na.rm = TRUE))
从 RM 开始,我 select 只有我感兴趣的日期 :
RM_reg <- subset(RM, date >= "2014-03-05" & date<="2014-09-03")
最后,RM_reg 看起来像这样:
| Date | RM |
|2014-03-05 | 0 |
|2014-03-06 | 7 |
|2014-03-07 | 8 |
|2014-03-08 | 1 |
|2014-03-09 | 45 |
|2014-03-10 | 0 |
|2014-03-11 | 34 |
|2014-03-12 | 45 |
|2014-03-13 | 4 |
|2014-03-14 | 0 |
|2014-03-15 | 14 |
|2014-03-16 | 31 |
需要注意的是,RM_reg栏中的值不是实际值,只是示例。从我原来的数据框开始,RM_reg 有 125 行。
然后,从数据帧 DF1 中,我通过以下代码提取 Company 列等于 A 的行:
DF_A <- DF_1%>%
filter(Symbol=="A")
然后我通过以下代码向数据框DF_A添加一列returns:
RA <- DF_A %>% group_by(Symbol)%>%
mutate(Ret_i = log(Price) - lag(log(Price)))
我去掉第一行,也就是NA:
AR <- na.omit(RA)
从 AR,我 select 只有我感兴趣的日期 :
AR_reg <- subset(AR, date >= "2014-03-05" & date<="2014-09-03")
AR_reg 看起来像这样:
|Symbol | Date | volume |price | Ret_i |
|--------------------------------------------|
|A |2014-03-05 | 1 | 5 | 2 |
|A |2014-03-06 | 3 | 8 | 3 |
|A |2014-03-07 | 7 | 4 | 4 |
|A |2014-03-08 |3 | 6 | 5 |
|A |2014-03-09 |34 | 7 | 1 |
|A |2014-03-10 |45 | 34 | 4 |
|A |2014-03-11 |4 | 5 | 3 |
|A |2014-03-12 |9 | 7 | 5 |
|A |2014-03-13 |8 | 6 | 6 |
|A |2014-03-14 |4 | 4 | 1 |
|A |2014-03-15 |0 | 7 | 4 |
|A |2014-03-16 |4 | 7 | 7 |
需要注意的是,AR_reg栏中的值不是实际值,只是示例。从我原来的数据框开始,AR_reg 也有 125 行。
最后,因为RM_reg和AR_reg我可以通过下面的代码在RM_reg的RM列上回归AR_reg的Ret_i列:
mod <- lm(AR_reg$Ret_i ~ RM_reg$RM)
我需要做的是对数据帧 DF1 中的所有符号执行与上述相同的操作,在本例中为“B”、“C”、“D”、“E”。问题是我们没有相同数量的条目,或者与所有符号对应的相同数量的行,这是能够进行回归的必要条件。要进行回归,我需要对每个符号进行 125 次 returns 观察。
我的想法是消除生成的类似于 AR_reg 的数据帧没有 125 个条目或行的符号;但事实是我不知道该怎么做,我想必须提出一个功能,但这是一个我仍然没有掌握的主题。
非常感谢你阅读我,我希望你已经理解了我。任何帮助或建议将不胜感激
翻译成www.DeepL.com/Translator(免费版)
通过 Date
加入 DF1
和 RM
,仅保留特定日期之间的数据,对于每个 Symbol
计算 Ret_i
并删除 NA
值并创建模型列表。
完整代码如下:
library(dplyr)
DF1$Date <- as.Date(DF1$Date)
RM <- DF1 %>%
group_by(Date) %>%
mutate(weight = Volume/sum(Volume),
R_i = weight*(log(Price)-log(lag(Price)))) %>%
summarise(RM = sum(R_i, na.rm = TRUE))
result <- DF1 %>%
left_join(RM, by = 'Date') %>%
filter(between(Date, as.Date("2014-03-05"), as.Date("2014-09-03")))
group_by(Symbol) %>%
mutate(Ret_i = log(Price) - lag(log(Price))) %>%
na.omit() %>%
summarise(model = list(lm(Ret_i~RM)))
result
各位!
我会尽力解释我的问题。这对我来说很难。我希望你能帮助我:
我有一个数据框,我们称它为 DF1,它看起来像下一个:
|Symbol | Date | Volume | Price|
|----------------------------|-------|
|A |2014-01-01 | 0 | 4 |
|A |2014-01-02 | 7 | 7 |
|A |2014-01-03 | 8 | 9 |
|A |2014-01-04 | 1 | 5 |
|B |2014-01-01 |45 | 6 |
|B |2014-01-02 |0 | 11 |
|B |2014-01-03 |34 | 8 |
|B |2014-01-04 |45 | 5 |
|C |2014-01-01 |4 | 6 |
|C |2014-01-02 |0 | 5 |
|C |2014-01-03 |14 | 25 |
|D |2014-01-01 |31 | 4 |
|D |2014-01-02 |7 | 6 |
|D |2014-01-03 |18 | 3 |
|D |2014-01-04 |15 | 7 |
|E |2014-01-01 |13 | 8 |
|E |2014-01-02 |0 | 9 |
有了这个数据框,我通过以下代码行创建了一个新的数据框,我们称之为 DF2:
RM <- DF1 %>% group_by(Date) %>%
mutate(weight = Volume/sum(Volume),
R_i = weight*(log(Price)-log(lag(Price)))) %>%
summarise(RM = sum(R_i, na.rm = TRUE))
从 RM 开始,我 select 只有我感兴趣的日期 :
RM_reg <- subset(RM, date >= "2014-03-05" & date<="2014-09-03")
最后,RM_reg 看起来像这样:
| Date | RM |
|2014-03-05 | 0 |
|2014-03-06 | 7 |
|2014-03-07 | 8 |
|2014-03-08 | 1 |
|2014-03-09 | 45 |
|2014-03-10 | 0 |
|2014-03-11 | 34 |
|2014-03-12 | 45 |
|2014-03-13 | 4 |
|2014-03-14 | 0 |
|2014-03-15 | 14 |
|2014-03-16 | 31 |
需要注意的是,RM_reg栏中的值不是实际值,只是示例。从我原来的数据框开始,RM_reg 有 125 行。
然后,从数据帧 DF1 中,我通过以下代码提取 Company 列等于 A 的行:
DF_A <- DF_1%>%
filter(Symbol=="A")
然后我通过以下代码向数据框DF_A添加一列returns:
RA <- DF_A %>% group_by(Symbol)%>%
mutate(Ret_i = log(Price) - lag(log(Price)))
我去掉第一行,也就是NA:
AR <- na.omit(RA)
从 AR,我 select 只有我感兴趣的日期 :
AR_reg <- subset(AR, date >= "2014-03-05" & date<="2014-09-03")
AR_reg 看起来像这样:
|Symbol | Date | volume |price | Ret_i |
|--------------------------------------------|
|A |2014-03-05 | 1 | 5 | 2 |
|A |2014-03-06 | 3 | 8 | 3 |
|A |2014-03-07 | 7 | 4 | 4 |
|A |2014-03-08 |3 | 6 | 5 |
|A |2014-03-09 |34 | 7 | 1 |
|A |2014-03-10 |45 | 34 | 4 |
|A |2014-03-11 |4 | 5 | 3 |
|A |2014-03-12 |9 | 7 | 5 |
|A |2014-03-13 |8 | 6 | 6 |
|A |2014-03-14 |4 | 4 | 1 |
|A |2014-03-15 |0 | 7 | 4 |
|A |2014-03-16 |4 | 7 | 7 |
需要注意的是,AR_reg栏中的值不是实际值,只是示例。从我原来的数据框开始,AR_reg 也有 125 行。
最后,因为RM_reg和AR_reg我可以通过下面的代码在RM_reg的RM列上回归AR_reg的Ret_i列:
mod <- lm(AR_reg$Ret_i ~ RM_reg$RM)
我需要做的是对数据帧 DF1 中的所有符号执行与上述相同的操作,在本例中为“B”、“C”、“D”、“E”。问题是我们没有相同数量的条目,或者与所有符号对应的相同数量的行,这是能够进行回归的必要条件。要进行回归,我需要对每个符号进行 125 次 returns 观察。
我的想法是消除生成的类似于 AR_reg 的数据帧没有 125 个条目或行的符号;但事实是我不知道该怎么做,我想必须提出一个功能,但这是一个我仍然没有掌握的主题。
非常感谢你阅读我,我希望你已经理解了我。任何帮助或建议将不胜感激
翻译成www.DeepL.com/Translator(免费版)
通过 Date
加入 DF1
和 RM
,仅保留特定日期之间的数据,对于每个 Symbol
计算 Ret_i
并删除 NA
值并创建模型列表。
完整代码如下:
library(dplyr)
DF1$Date <- as.Date(DF1$Date)
RM <- DF1 %>%
group_by(Date) %>%
mutate(weight = Volume/sum(Volume),
R_i = weight*(log(Price)-log(lag(Price)))) %>%
summarise(RM = sum(R_i, na.rm = TRUE))
result <- DF1 %>%
left_join(RM, by = 'Date') %>%
filter(between(Date, as.Date("2014-03-05"), as.Date("2014-09-03")))
group_by(Symbol) %>%
mutate(Ret_i = log(Price) - lag(log(Price))) %>%
na.omit() %>%
summarise(model = list(lm(Ret_i~RM)))
result