非常に非効率的な方法でコーディングしたタスクを改善するためのアイデア/機能を探しています。
元のデータ フレームは次のようになります。
CUSIP Date Pclose TRI
1 30161N101 2011-01-03 38.8581 2011-01-03
2 06738G878 2011-01-03 48.4040 2011-01-03
3 74339G101 2011-01-03 24.0880 2011-01-03
4 74348A590 2011-01-03 81.7200 2011-01-03
5 26922W109 2011-01-03 87.8700 2011-01-03
...
列「TRI」には、日付形式の日付が含まれています。
そして、私が取得したいものは次のようになります:
Date 233052109 126650100 251566105 149123101 ...
1 2011-01-03 22.8031 34.3034 11.2645 91.6178
2 2011-01-04 22.6843 34.2740 11.1862 91.1897
3 2011-01-05 22.7933 34.6362 10.9948 91.9779
4 2011-01-06 22.8034 34.2838 11.0470 91.0242
5 2011-01-07 22.6248 34.3034 11.0644 91.2091
.
.
.
2 番目のデータ フレームでは、各列 (日付を除く) は最初のデータ フレームからの CUSIP の名前を持ち、Pclose からのデータで埋められます。
通常のループで2番目のデータフレームを作成していますが、コンパイルされた関数を使用してより良い方法を実行する方法があると確信しています(おそらくサブセット)
私の機能は次のとおりです。
2 番目のデータ フレームを作成するには:
function(cusippresent,cusiplist){
workinglist=list()
workinglist[1]=as.character('Date')
position = 2
for (i in 2:length(cusippresent)) {
if(cusippresent[i] %in% cusiplist) {
workinglist[position]=as.character(cusippresent[i]);
position=position+1
}
}
rm(position)
Data=data.frame()
#On remplit la première ligne du dataframe
#avec des éléments du bon type sinon il y a des problèmes
Data[1,1]=as.character('1987-11-12')
Data[1,2]=as.numeric(1)
for (i in 2:length(workinglist)){Data[1,i]=as.numeric(1)}
for (i in 1:length(workinglist)){colnames(Data)[i]=workinglist[i]}
return(Data)
}
データ フレームを埋めるには:
function(DATA11C,TCusipC){
nloop = 1
positionorigine = 1
positioncible = 1
#copy of dates
datelist = DATA11C[,"Date"]
datelist = unique(datelist)
for (i in 1:length(datelist)) {
TCusipC[i,"Date"]=as.character(datelist[i])
}
#creation of needed columns
TCusipC[,ncol(TCusipC)+1] = as.Date(TCusipC[,"Date"])
colnames(TCusipC)[ncol(TCusipC)] = 'TRI'
#ordering of tables
DATA11C=DATA11C[with(DATA11C,order(TRI)),]
TCusipC=TCusipC[with(TCusipC,order(TRI)),]
longueur = nrow(TCusipC)
#filling of the table
while(nloop<longueur) {
while(DATA11C[positionorigine,"TRI"]==TCusipC[positioncible,"TRI"]){
nom = as.character(DATA11C[positionorigine,"CUSIP"]);
TCusipC[positioncible,nom]=as.numeric(DATA11C[positionorigine,"Pclose"]);
positionorigine=positionorigine+1
};
nloop=nloop+1;
positioncible=positioncible+1
}
return(TCusipC)
}
どの機能を掘り下げるかについて何か提案はありますか? 潜在的な改善?
どうもありがとう、
ヴィンセント