我想在r中構建一個代碼,它將根據不同列中的行的值,從一列中的某些行返回值。如何根據另一列中實現的限制從一列中提取某些值?
更具體的我有以下的數據集(BTM
):
Date CompanyName MarketValue BookValue BookToMarket
31.12.87 Bure Equity 2182000 2260267
31.01.88 Bure Equity 2102000 1950267
29.02.88 Bure Equity 2182000 2550267
...
31.07.88 Bure Equity 2022000 2980267 BookValue Des87/MarketValueJuly88
31.08.88 Bure Equity 2162000 2650267
30.09.88 Bure Equity 2272000 2390267 BookValue Des87/MarketValueSept88
31.10.88 Bure Equity 2122000 2650267
30.11.88 Bure Equity 2382000 2350267
31.12.88
31.12.87 H&M 2182000 2650267
31.01.88 H&M 2102000 2650267
29.02.88 H&M 2182000 2650267
(這僅是從總數據集一個小片段,我有大約1000家公司和30年的月度數據的每家公司)
我需要計算每個公司在每個日期內的賬面市值。然而,當計算1988年7月至1989年6月的賬面市值時,我需要使用1987年12月的賬面價值。這意味着我需要讓R理解在計算賬面市值時1988年7月 - 1989年6月; R需要使用1987年12月的賬面價值,同時使用給定月份的市場價值。
換句話說,我需要對以下代碼進行編碼:獲取「Bure Equity」的賬面價值,如果它對應於日期31.12.87。然後將此賬面價值從88年7月至89年的「Bure Equity」的市場價值進行分割。
(這需要進行編碼,以便它適用於每家公司和1987年至2016年期間)。
爲了做到這一點,我試圖在R鍵鍵入以下命令:
BTM$"Book to Market" <- ((BTM$"Book Value" | "Date"=="1987-12")/BTM$"Market Value")
這給了我一些值,但預期不正確的。
理想情況下,我想要一個公式,可以給我的值從「賬面價值」欄 - 如果它對應於12月87日,12月88日,12月89日等在「日期」列。
而且我當時必須具備r分割在不同的市場價值選擇的賬面值在接下來的幾個月月88 june89,89月 - 90年6月等
同樣重要的是,R公司分離從彼此。例如,我需要R理解,H & M(而不是Bure Equity)的市場價值在98年7月份只能在97年12月份將賬面價值H & M分開。
有沒有人有關於如何完成這件事的想法?
我很感激我能得到的任何提示。
我認爲你可以使用dplyr實現日是。你能發佈一個可複製的數據例子,這樣我們可以玩嗎? 'dput(head(BTM))'應該可以工作。 – csgroen
在你的例子中,你所有的'BookValue'都是一樣的,你可以在哪裏提供不同'BookValue'的數據? – useR
我現在已經改變了BookValue的:) – Marthe