在r中按子类别和运行函数进行筛选
我有这样的数据:在r中按子类别和运行函数进行筛选,r,for-loop,filter,R,For Loop,Filter,我有这样的数据: Ind_name Co_Name Year EPS BPS 1 A X 2001 10 11 2 A X 2002 12 12 3 A X 2003 15 15 4 A Y 2001 10 18 5 A Y 2002 16 25 6 A Y 2003 20 26 7 B
Ind_name Co_Name Year EPS BPS
1 A X 2001 10 11
2 A X 2002 12 12
3 A X 2003 15 15
4 A Y 2001 10 18
5 A Y 2002 16 25
6 A Y 2003 20 26
7 B Z 2001 14 36
8 B Z 2002 16 9
9 B Z 2003 20 10
同样,在我的数据集中,有50个行业,每个行业有15家公司,每个公司有20年的数据
我想要以下东西:
1.过滤特定行业特定年份所有公司的数据。例如
Ind_name Co_Name Year EPS BPS
1 A X 2001 10 11
4 A Y 2001 10 18
之后,我需要计算相关系数,以及每股收益和每股收益之间的回归(斜率)β
我想要这样的输出:
Ind_name Year Correlation Beta
A 2001 .55 #assume 1.2 #assume
A 2002 .85 #assume 0.2 #assume
A 2003 .65 #assume .65 #assume
你能告诉我如何做到这一点吗
注:相关和回归斜率的计算如下:
cor(EPS,BPS) #corrleation
summary(lm(mydata$EPS~mydata$BPS))$coefficients[2] #directly give beta
试用
dplyr
软件包:
library("dplyr")
df %>%
group_by(Ind_name, Year) %>%
summarise(Mean=mean(EPS),
Median=median(EPS),
Variance=var(EPS))
试用
dplyr
软件包:
library("dplyr")
df %>%
group_by(Ind_name, Year) %>%
summarise(Mean=mean(EPS),
Median=median(EPS),
Variance=var(EPS))
我们可以使用
data.table
library(data.table)
setDT(df1)[,list(Mean = mean(EPS), Variance = var(EPS)) ,
by = .(Ind_name, Year)]
更新 (只是发布我之前的评论)。我们将'data.frame'转换为'data.table'(
setDT(df1)
),按'Ind_name'、'Year'分组,得到'EPS'、'BPS'的cor
,以及基于这些列的lm
的coef
,然后将'Ind_name'子集化为“A”值
我们可以使用
data.table
library(data.table)
setDT(df1)[,list(Mean = mean(EPS), Variance = var(EPS)) ,
by = .(Ind_name, Year)]
更新 (只是发布我之前的评论)。我们将'data.frame'转换为'data.table'(
setDT(df1)
),按'Ind_name'、'Year'分组,得到'EPS'、'BPS'的cor
,以及基于这些列的lm
的coef
,然后将'Ind_name'子集化为“A”值
更完整的
数据。基于表的方法,通过CJ(c(“A”)、c(2001)
实施过滤,仅选择相关行业和年份:
library(data.table)
mydata <- fread("Ind_name Co_Name Year EPS BPS
A X 2001 10 11
A X 2002 12 12
A X 2003 15 15
A Y 2001 10 18
A Y 2002 16 25
A Y 2003 20 26
B Z 2001 14 36
B Z 2002 16 9
B Z 2003 20 10")
setkey(mydata, Ind_name, Year)
mydata[
CJ("A", c(2001, 2002, 2003))
, {
list(
Correlation = cor(EPS,BPS)
, Beta = summary(lm(EPS~BPS))$coefficients[2]
)
}
, keyby = .(Ind_name, Year)
]
您可以根据需要扩展“函数”(即J参数)的复杂性。一种更完整的数据。基于表格的方法,通过CJ(c(“A”),c(2001,…)
实现过滤,仅选择相关行业和年份:
library(data.table)
mydata <- fread("Ind_name Co_Name Year EPS BPS
A X 2001 10 11
A X 2002 12 12
A X 2003 15 15
A Y 2001 10 18
A Y 2002 16 25
A Y 2003 20 26
B Z 2001 14 36
B Z 2002 16 9
B Z 2003 20 10")
setkey(mydata, Ind_name, Year)
mydata[
CJ("A", c(2001, 2002, 2003))
, {
list(
Correlation = cor(EPS,BPS)
, Beta = summary(lm(EPS~BPS))$coefficients[2]
)
}
, keyby = .(Ind_name, Year)
]
您可以扩展“函数”(即J参数)的复杂性尽可能多。它们有多复杂,不可能使用dplyr
吗?然后分享你的复杂函数
@moto我已经编辑了我的问题。请查看。如果你想要的结果中没有数据,为什么要按公司分组数据请在这里查找lm()
与dplyr
组合:它们是如何复杂的,dplyr
是不可能的?然后分享你的复杂函数
@moto我已经编辑了我的问题。请查看。如果你想要的结果中没有数据,为什么要按公司分组数据请在这里查找lm()
结合dplyr
:谢谢。实际上,我想通过循环来实现这一点,因为我需要运行一些复杂的函数,而我不能在dplyr包的摘要中运行。你确定他们不能吗?@Neeraj,让我试试:D@Neeraj你必须更具体一些。@Marta,这不是按要求筛选行。或者我遗漏了什么欣?谢谢。实际上我想通过循环来完成这项工作,因为我需要运行一些复杂的函数,而我不能在dplyr包的摘要中运行。你确定他们不能吗?@Neeraj,让我试试:D@Neeraj你必须更具体一些。@Marta,这不是按要求筛选行。或者我遗漏了什么?如果我需要计算corr呢EPS和BPS之间的关系,回归斜率$betaβ等。我还没有投票给他们。另外,我在之后编辑了我的问题。是的,我需要执行考虑数据多于一个变量的函数(Line LM函数)。。这只是一个问题。我想通过循环完成。这很有效。但为此,我必须再学习一个程序包。谢谢。您总是提供最有效的代码。如果我需要计算每股收益和每股收益之间的相关性,回归斜率$\beta$等,我没有对它们进行优化。此外,我还编辑了我的问题。是的,我需要执行以下操作:M函数考虑多个变量的数据(行LM函数)。这只是一个问题。我想通过循环完成。这很有效。但为此,我必须再学习一个软件包。谢谢。你总是提供最有效的代码。我有15家公司的数据,每个公司有20年的数据。我需要在“CJ”中键入每个公司的名称和年份吗命令?当您根据Ind_name和Year的值进行过滤时,您只会给出2个向量-一个包含Ind_name,第二个必须包含Year的值。如果您希望计算每个年份和行业的相关性和Beta,则可以省略整个CJ().我有15家公司的数据,每个公司都有20年的数据。我是否需要在“CJ”中键入每个公司的名称和年份命令?当您根据Ind_name和Year的值进行筛选时,您只会给出2个向量-一个包含Ind_name,第二个必须包含Year的值。如果您希望计算每个年份和行业的相关性和Beta,则可以省略整个CJ()。