我只是想知道是否存在解决以下问题的最佳方法:
对于个人公司,我有一个相当大的每日收益数据框架。
dates <- c("04.01.1995","05.01.1995","06.01.1995","09.01.1995","10.01.1995","11.01.1995","12.01.1995","13.01.1995")
stock1 <- rnorm(0.1,n = 3)
stock2 <- c(unlist(strsplit(rep("Na",8),split = " ")))
stock3 <- rnorm(0.1,n = 3)
stock4 <- rnorm(0.1,n = 3)
stock5 <- rnorm(0.1,n = 3)
stock6 <- rnorm(0.1,n = 3)
stock7 <- rnorm(0.1,n = 3)
stock8 <- c(unlist(strsplit(rep("Na",8),split = " ")))
cbind(dates,stock1,stock2,stock3,stock4,stock5,stock6,stock7,stock8)
看起来像这样:
dates stock1 stock2 stock3 stock4 stock5....
"04.01.1995" "1.8249" "Na" "2.7125" "0.557280737196038" "1.38681707010098"
我想计算每个特定行的平均值,然后删除“行均值”或阈值以下同一行中的观察值/元素。
提前谢谢!
答案 0 :(得分:2)
我建议使用dplyr
软件包。在线上有很多介绍,但最好的办法是directly from Hadley。
您的数据有点混乱:最好有一个日期列,一个库存编号列和一个值列。使用gather
软件包中的tidyr
函数可以很容易地做到这一点(顾名思义,该软件包专门用于清理混乱的数据)。再次加载online resources。
从那里开始,您可能想要group_by
公司/股票和年份,然后summarise
获得每个公司和每年的平均值,然后filter
保留仅那些符合您的条件。
希望您有足够的关键字来更有效地进行搜索!
答案 1 :(得分:1)
您可以尝试:
datos =data.frame(date=c('02/01/1995','2019-01-02','2019-01-03'),
stock.1=c(0.1,NA,6),
stock.2=c(NA,7,6),
stock.3=c(0.4,7,1),
stock.4=c(0.1,7,1),
stock.5=c(0.2,7,1),
stock.6=c(0.7,7,1),
stock.7=c(1.2,7,1)
)
result <- datos[!(datos$date == "02/01/1995" & datos$stock.1==0.1 & datos$stock.2=="NA" & datos$stock.3==0.4 & datos$stock.4==0.1 & datos$stock.5==0.2 &
datos$stock.6==0.7 & datos$stock.7==1.2),]
这是结果:
date stock.1 stock.2 stock.3 stock.4 stock.5 stock.6 stock.7
1 02/01/1995 0.1 NA 0.4 0.1 0.2 0.7 1.2
2 2019-01-02 NA 7 7.0 7.0 7.0 7.0 7.0
3 2019-01-03 6.0 6 1.0 1.0 1.0 1.0 1.0
> result <- datos[!(datos$date == "02/01/1995" & datos$stock.1==0.1 & datos$stock.2=="NA" & datos$stock.3==0.4 & datos$stock.4==0.1 & datos$stock.5==0.2 & datos$stock.6==0.7 & datos$stock.7==1.2),]
> result
date stock.1 stock.2 stock.3 stock.4 stock.5 stock.6 stock.7
NA <NA> NA NA NA NA NA NA NA
2 2019-01-02 NA 7 7 7 7 7 7
3 2019-01-03 6 6 1 1 1 1 1
我希望这会有所帮助!