2

毎月のリターンとそれに対応する月のデータ フレームがあります。

Data <- read.csv("C:/Users/h/Desktop/overflow.csv", sep=";", dec=",")
Data$Date <- as.Date(as.character(Data$Date), format="%Y-%m-%d")

データ フレームは次のようになります。

> Data
           Fund.A Fund.B Fund.C Fund.D
2012-01-01  -0.01   0.04   0.11   0.10
2012-02-01  -0.04  -0.06   0.08   0.11
2012-03-01  -0.04  -0.07   0.15  -0.03
2012-04-01   0.00  -0.08  -0.04   0.13
2012-05-01  -0.07   0.10   0.06   0.02
2012-06-01  -0.05   0.06   0.06  -0.02
2012-07-01   0.12  -0.06  -0.09  -0.06
2012-08-01   0.08  -0.03   0.05   0.13
2012-09-01   0.10   0.07  -0.02   0.15
2012-10-01  -0.08   0.14   0.00  -0.04
2012-11-01  -0.09   0.11  -0.07   0.12
2012-12-01  -0.01  -0.09   0.07  -0.02

ここで、新しいリターンを「データ」の適切なファンドと単純に照合することにより、新しい csv からの新しいリターンで時系列を継続したいと考えています。私の問題は、新しいアセットが追加されて、順序が乱れている可能性があることです。

import <- read.csv("C:/Users/h/Desktop/import.csv", sep=";", dec=",")
import
           2013-01-01
1  Funds:          NA
2  Fund A        0.04
3  Fund AA      -0.09
4  Fund C       -0.10
5  Fund D        0.03
6  Fund B        0.14

ご覧のとおり、「インポート」csv には新しい資産 (ファンド AA) と「データ」に表示される資産 (ファンド a ~ D) があり、資金は列ではなく行にあります。「インポート」の値が「データ」の右側の列 (資金) に該当する行を「データ」に一致させて追加するコードを作成するにはどうすればよいですか? 新しいアセットが追加された場合、新しいアセットの列を作成しますか?

おまけとして、「インポート」の日付が「データ」の最新の日付よりも新しい場合にのみ、コードは行を追加します。新しい返品のみをインポートします。

感謝します!

4

1 に答える 1

1

時系列の目的で、xtsを使用することをお勧めします。それは人生を少し楽にします。Arun の使用可能なデータからの借用:

olddata <- structure(list(Date = structure(c(15340, 15371, 15400, 15431,
  15461, 15492, 15522, 15553, 15584, 15614, 15645, 15675), class = "Date"), 
  Fund.A = c(-0.01, -0.04, -0.04, 0, -0.07, -0.05, 0.12, 0.08, 0.1, -0.08,
  -0.09, -0.01), Fund.B = c(0.04, -0.06, -0.07, -0.08, 0.1, 0.06, -0.06,
  -0.03, 0.07, 0.14, 0.11, -0.09), Fund.C = c(0.11, 0.08, 0.15, -0.04,
  0.06, 0.06, -0.09, 0.05, -0.02, 0, -0.07, 0.07), Fund.D = c(0.1, 0.11,
  -0.03, 0.13, 0.02, -0.02, -0.06, 0.13, 0.15, -0.04, 0.12, -0.02)),
  .Names = c("Date", "Fund.A", "Fund.B", "Fund.C", "Fund.D"),
  row.names = c(NA, 12L), class = "data.frame")

newimport <- structure(list(funds = c("Fund.A", "Fund.AA", "Fund.C",
  "Fund.D", "Fund.B"), `2013-01-01` = c(0.04, -0.09, -0.1, 0.03, 0.14)),
  .Names = c("funds", "2013-01-01"), row.names = c(NA, -5L),
  class = "data.frame")

日付ごとのサブセット化を容易にするために、データを xts に変換します。

olddata <- xts(olddata[,-1], olddata$Date)
newdata <- xts(t(newimport[,-1]), as.Date(colnames(newimport)[-1]))
colnames(newdata) <- newimport[,1]

新しい列を処理しながら、データをマージします。

cols <- names(newdata) %in% names(olddata)
combineData <- merge(rbind(olddata, newdata[,cols]), newdata[,!cols])
combineData
           Fund.A Fund.B Fund.C Fund.D Fund.AA
2012-01-01  -0.01   0.04   0.11   0.10      NA
2012-02-01  -0.04  -0.06   0.08   0.11      NA
2012-03-01  -0.04  -0.07   0.15  -0.03      NA
2012-04-01   0.00  -0.08  -0.04   0.13      NA
2012-05-01  -0.07   0.10   0.06   0.02      NA
2012-06-01  -0.05   0.06   0.06  -0.02      NA
2012-07-01   0.12  -0.06  -0.09  -0.06      NA
2012-08-01   0.08  -0.03   0.05   0.13      NA
2012-09-01   0.10   0.07  -0.02   0.15      NA
2012-10-01  -0.08   0.14   0.00  -0.04      NA
2012-11-01  -0.09   0.11  -0.07   0.12      NA
2012-12-01  -0.01  -0.09   0.07  -0.02      NA
2013-01-01   0.04   0.14  -0.10   0.03   -0.09
于 2013-01-18T02:16:02.800 に答える