Rで、ベクトルの中の重複した数字をまとめて削除

ベクターの中に重複した数字があった場合は、重複した要素をまとめて削除する。
最終的に、重複していなかった数字だけを残すようにしたい。

> test.data <- c("1","1","2","3","3","4","5","6","6")
> test.data2 <- as.numeric(test.data)
> dup.list <- which(duplicated(test.data))
> dup.list2 <- sort (dup.list, decreasing=T)

> for (i in dup.list2){
test.data2 <- test.data2[-i]
test.data2 <- test.data2[-(i-1)]
}

> test.data2
[1] 2 4 5

重複している要素を見つけて、それとそれの一つ前の要素を削除するような処理にしてある。
(数字はソートされている前提で処理している。)
要素が3つ以上ある場合はこれじゃダメかもしれないけれど、当面の問題はこれで解決か。

Wine上のOffice 2010で日本語入力に成功。

かなり手こずったものの、こちらのサイトを参考に日本語入力の設定ができたのでメモしておく。
http://grade2linux.wordpress.com/tag/ibus/

環境は、Ubuntu 12.04、Wineのバージョンは1.5.20を使用した。
Microsoft Office 2010のインストール前にWinetrickからcorefonts、dotnet20、msxml6、riched20を予めインストールしておく。

これでOffice2010 Home and Student (Word + Excel + Powerpoint)をインストール
インストール自体は問題なく終了するが、このままだと日本語入力ができないので、

~/.local/share/applications/wine/Programs/Microsoft Office
の中にある、
Microsoft Office Excel 2010.desktop
Microsoft Office PowerPoint 2010.desktop
Microsoft Office Word 2010.desktop
をエディタで開き
Exec=env WINEPREFIX=..............となっている部分に、
Exec=env LANG=ja_JP.UTF-8 WIEPREFIX=............
と書きたして保存。

これでインライン変換はできないものの、WordとExcelはざっと使用してみた感じ問題なく日本語入力ができるようになった。
ただし、Powerpointに関しては、漢字変換を確定した時に半分くらいの確率で文字が入力されずに消えてしまう。。

read.csvのas.isオプション

Rで.csvファイルを読み込むときに、数値データの他に、何か文字等が混ざっていると自動的にfactor型として読み込まれるときがある。そうしたときに、as.numericで変換するとどうにもうまく行かないときがあった。

そうした時にはファイルを読み込む際にread.csv関数のas.isオプションを設定しておくとうまく行くよう。

data <- read.csv ("data.csv", as.is=T)

こんな感じで、読み込めばうまく行く様子。
かなり、すっきり。

xtsデータの取扱い

まずは、xtsパッケージのCRANのマニュアルはここ
http://cran.r-project.org/web/packages/xts/xts.pdf
どうやら、zooというパッケージを拡張したものに当たるらしいので、いずれzooのマニュアルも見てみないとか。

今回は、手持ちのxtsデータから、差分データ(例えば、2012年1月から11月までのデータがあるとして、12月分のデータを取得する場合)どうしたら良いのか考えてみる

まずはベースにする1−11月までのデータを取得してみる。
今回は、日経平均株価のデータをRFinanceYJを使用して取得する。

> require (RFinanceYJ)
> nikkei <- quoteStockXtsData(998407, since='2012-01-01', date.end='2012-11-30')

まずは、nikkeiオブジェクトの最後の日付を取得してみる。

> index(last(nikkei))
[1] "2012-11-30 PST"

この日付の次の日から今日までのデータを取得するには、

#86400は1日の秒数
> nikkei.diff <- quoteStockXtsData(998407, since=index(last(nikkei)) + 86400)
> nikkei.diff
Open High Low Close Volume AdjClose
2012-12-03 9484.20 9525.82 9453.48 9458.18 0 0
2012-12-04 9419.15 9457.19 9406.03 9432.46 0 0

nikkeiと差分のnikkei.diffをマージするには、

> nikkei.new <- rbind (nikkei, nikkei.diff)

でよさそう。


2013年1月6日追記
少し内容をアップデートして更新。
http://d.hatena.ne.jp/yagi-k/20130106/1357542096

RFinanceYJを使用して、東証一部の株価を一通り取得してみる。

RFinanceYJパッケージを使用して、日本株のデータを色々取得してみる練習。

まずは、下記の東証のHPから上場銘柄一覧の.xlsファイルをダウンロード。
http://www.tse.or.jp/market/data/listed_companies/index.html

とりあえず、今回は東証一部のみに絞ってみるので、下記をダウンロード。
http://www.tse.or.jp/market/data/listed_companies/b7gje60000023aiz-att/first-d-j.xls

ダウンロードしたファイルをRのワーキングディレクトリに移動して、

> require (RFinanceYJ)
# xlsファイルを直接読み込むための、read.xls関数を含むパッケージ
> require (gregmisc)

> stocklist.j <- read.xls ("first-d-j.xls",header=T)
# 読み込んだxlsファイルからコードの列だけを取り出す。
> stocklist <- stocklist.j$コード

# 2012年分のデータを取得
# 取得開始日や終了日はquoteStockXtsData関数のパラメーターで調節可能。
# 結構時間が掛かって不安になるので、各データの取得が終わる事に証券コードをコンソールに返すようにしておく。

> for (i in stocklist) {
assign (paste("s",i, sep=""),quoteStockXtsData(paste(i,".t"), '2012-01-01'))
print (i)
}

とりあえず、今日はここまで。
取得したデータは日が経つ事に古くなってしまうので、更新する方法も考えないと。


2013年1月6日追記
少し内容をアップデートして更新。
http://d.hatena.ne.jp/yagi-k/20130106/1357542096

RFinanceYJパッケージを使ってみた

RFinanceYJパッケージを使用してYahooから株価の取得をしてみる。

マニュアルはここから。
http://cran.r-project.org/web/packages/RFinanceYJ/RFinanceYJ.pdf

今回は、xts形式でダウンロードするために、quoteStockXtsData関数を使用する。
quoteStockTsData関数を使用すればts形式でのダウンロードも可能だが、正直違いはよく分からない。

東証の場合は証券コードに".t"、大証なら".o"等を追加する必要がある。
YahooのサイトのURLを参照すればどの証券市場に何を足したらいいか分かる様。

例えば、トヨタ自動車の株価を2012年11月20日から最新まで取得するなら、

> toyota <- quoteStockXtsData("7203.t", "2012-11-20")
> toyota
Open High Low Close Volume AdjClose
2012-11-20 3380 3390 3350 3360 5576900 3360
2012-11-21 3400 3450 3390 3435 9692400 3435
2012-11-22 3485 3520 3480 3515 10714400 3515
2012-11-26 3570 3660 3560 3575 15487700 3575


と言った形で可能になる。