首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从变量值创建新的Data.Frame

从变量值创建新的Data.Frame
EN

Stack Overflow用户
提问于 2019-12-19 22:41:17
回答 1查看 54关注 0票数 0

我目前正在处理一项任务,该任务要求我从sql数据库中查询股票列表。问题是,这是一个每天有1:n股票交易的列表。我想计算投资组合中每个股票在给定日期的份额(参见示例),并将其传递到一个新的数据框架中。换句话说,日期x出现了2次(一次针对股票A,一次针对股票B),然后将日期x与新值合并在一起,日期x只出现一次。

代码语言:javascript
复制
'data.frame':   1010 obs. of  5 variables:
 $ ID         : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Date      : Date, format: "2019-11-22" "2019-11-21" "2019-11-20" "2019-11-19" ...
 $ Close: num  52 51 50.1 50.2 50.2 ...
 $ Volume     : num  5415 6196 3800 4784 6189 ...
 $ Stock_ID  : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...

RawInput<-data.frame(Date=c("2017-22-11","2017-22-12","2017-22-13","2017-22-11","2017-22-12","2017-22-13","2017-22-11"), Close=c(50,55,56,10,11,12,200),Volume=c(100,110,150,60,70,80,30),Stock_ID=c(1,1,1,2,2,2,3))
RawInput$Stock_ID<-as.factor(RawInput$Stock_ID)

*在此示例中,无法将日期转换为日期变量

我希望有一个新的数据框架,它可以生成每天交易的价值,每只股票的权重和每天的回报,同时保持股票数量的可变。

我希望我正确地翻译了这个问题,这样我就可以得到帮助。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 23:52:08

我认为最简单的方法是使用dplyr包。您可能需要阅读一些文档,但是mutategroup_by函数也许可以做您想做的事情。此函数允许您通过添加新列或更改现有数据来修改当前数据帧。

让我们从一个可重现的数据集开始

代码语言:javascript
复制
RawInput<-data.frame(Date=c("2017-22-11","2017-22-12","2017-22-13","2017-22-11","2017-22-12","2017-22-13","2017-22-11"),
                    Close=c(50,55,56,10,11,12,200),
                    Volume=c(100,110,150,60,70,80,30),
                    Stock_ID=c(1,1,1,2,2,2,3))
RawInput$Stock_ID<-as.factor(RawInput$Stock_ID)
library(magrittr)
library(dplyr)
dat2 <- RawInput %>%
    group_by(Date, Stock_ID) %>%  #this example only has one stock type but i imagine you want to group by stock
    mutate(CloseMean=mean(Close),
           CloseSum=sum(Close),
           VolumeMean=mean(Volume),
           VolumeSum=sum(Volume)) #what ever computation you need to do with
                                  #multiple stock values for a given date goes here
dat2 %>% select(Stock_ID, Date, CloseMean, CloseSum, VolumeMean,VolumeSum) %>% distinct() #dat2 will still be the same size as dat, thus use the distinct() function to reduce it to unique values
# A tibble: 7 x 6
# Groups:   Date, Stock_ID [7]
  Stock_ID Date       CloseMean CloseSum VolumeMean VolumeSum
  <fct>    <fct>          <dbl>    <dbl>      <dbl>     <dbl>
1 1        2017-22-11        50       50        100       100
2 1        2017-22-12        55       55        110       110
3 1        2017-22-13        56       56        150       150
4 2        2017-22-11        10       10         60        60
5 2        2017-22-12        11       11         70        70
6 2        2017-22-13        12       12         80        80
7 3        2017-22-11       200      200         30        30

您提供的这个数据集实际上只有一个惟一的Stock_ID和日期组合,所以实际上没有对数据做任何操作。但是,如果您在必要时删除Stock_ID,则可以看到此函数是如何工作的

代码语言:javascript
复制
dat2 <- RawInput %>%
        group_by(Date) %>%  
        mutate(CloseMean=mean(Close),
               CloseSum=sum(Close),
               VolumeMean=mean(Volume),
               VolumeSum=sum(Volume)) 
dat2 %>% select(Date, CloseMean, CloseSum, VolumeMean,VolumeSum) %>% distinct() 

# A tibble: 3 x 5
# Groups:   Date [3]
  Date       CloseMean CloseSum VolumeMean VolumeSum
  <fct>          <dbl>    <dbl>      <dbl>     <dbl>
1 2017-22-11      86.7      260       63.3       190
2 2017-22-12      33         66       90         180
3 2017-22-13      34         68      115         230

在读完你的第一个回复后,你必须具体说明你是如何计算权重的。还要定义你的最终结果。我假设重量只是总成本的百分比。最终结果是每个日期显示每个股票的权重。换句话说,一个由日期和股票In组成的矩阵

代码语言:javascript
复制
library(tidyr)
RawInput %>%
     group_by(Date) %>%
     mutate(weight=Close/sum(Close)) %>%
     select(Date, weight, Stock_ID) %>%
     spread(key = "Stock_ID", value = "weight", fill = 0)

# A tibble: 3 x 4
# Groups:   Date [3]
  Date         `1`    `2`   `3`
  <fct>      <dbl>  <dbl> <dbl>
1 2017-22-11 0.192 0.0385 0.769
2 2017-22-12 0.833 0.167  0    
3 2017-22-13 0.824 0.176  0   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59411947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档