R中

2016-10-02 44 views
1

創建子組的權重目前,我有R中的表/ CSV:R中

Name Value Sector Date 
Company1 100 Financials 3/31/2015 
Company2 100 Energy 3/31/2015 
Company3 100 Healthcare 3/31/2015 
Company4 100 Financials 3/31/2015 
Company5 100 Energy 3/31/2015 
Company6 100 Healthcare 3/31/2015 
Company1 100 Financials 6/30/2015 
Company2 200 Energy 6/30/2015 
Company3 200 Healthcare 6/30/2015 
Company4 200 Financials 6/30/2015 
Company5 200 Energy 6/30/2015 

我想創建是每個季度結束日期,權重爲基礎值的每個部門。

我一直在使用:

cdata <- ddply(Test.Exposure, c("Date", "Sector"), summarise, 
       Sumx1 = sum(Value)) 

這給了我:

  Date  Sector Sumx1 
1  3/31/2015  Energy 200 
2  3/31/2015 Financials 200 
3  3/31/2015 Healthcare 200 
4  6/30/2015  Energy 400 
5  6/30/2015 Financials 300 
6  6/30/2015 Healthcare 400 

1)是否有一種方式來獲得一筆%

2)是否有可能要爲每個季度結束日期只有一條線,而有這樣一列中的每個部門:

  Financials Energy Healthcare 
3/31/2015 33,33% 33,33% 33,33% 
6/30/2015 ... ... ... 

回答

0

可以使用xtabs通過rowSums如下:

a <- xtabs(Sumx1~Date+Sector, d) 

#   Sector 
#Date  Energy Financials Healthcare 
# 3/31/2015 200  200  200 
# 6/30/2015 400  300  400 

round(a/rowSums(a)*100, 2) 

#   Sector 
#Date  Energy Financials Healthcare 
# 3/31/2015 33.33  33.33  33.33 
# 6/30/2015 36.36  27.27  36.36 

數據

d <- read.table(text="   Date  Sector Sumx1 
1  3/31/2015  Energy 200 
2  3/31/2015 Financials 200 
3  3/31/2015 Healthcare 200 
4  6/30/2015  Energy 400 
5  6/30/2015 Financials 300 
6  6/30/2015 Healthcare 400", header=T) 
+0

謝謝@ m0h3n這工作得很好! 我的最後的代碼是: CDATA < - ddply(Test.Exposure,C( 「Valuation.Date」, 「扇區」),概括地說, Sumx1 =總和(Market.Value)) 一個< - XTABS( Sumx1〜Valuation.Date + Sector,cdata) round(a/rowSums(a)* 100,2) – lapioche75

0

我們可以這樣做dplyr/tidyr

library(dplyr) 
library(tidyr) 
Test.Exposure %>% 
    group_by(Date, Sector) %>% 
    summarise(Sumx1 = sum(Value)) %>% 
    group_by(Date) %>% 
    mutate(Sumx1 = round(100*Sumx1/sum(Sumx1),2)) %>% 
    spread(Sector, Sumx1) 
#  Date Energy Financials Healthcare 
#  <chr> <dbl>  <dbl>  <dbl>  
#1 3/31/2015 33.33  33.33  33.33 
#2 6/30/2015 36.36  27.27  36.36 
+0

在我的原始數據中,Value列中的數字是類型「100,125,125」io 100 125 125. So R閱讀這些字符,並不會讓我這樣做:總結(Sumx1 =總和(價值)) 我嘗試各種as.numeric(as.character(值),但這將無法正常工作任何想法。謝謝! – lapioche75

+0

@ lapioche75如果在你的文章中顯示的'ddply'在那個數據集中是'dplyr'選項也應該工作。或者這是一個不同的問題? – akrun

+0

@ lapioche75也許你需要分割它。 '庫(tidyr); (測試。曝光,值,轉換= TRUE)%>%group_by(Date,Sector)%>%summarize(Sum1 = sum(Value))'然後完成其餘 – akrun