データのインポート

カンマ区切り、タブ区切りテキストファイル

# 1行目は変数名、1列目がidのとき
# バックスラッシュ (\) ではなくスラッシュ (/) を使っていることに注意

# csv (カンマ区切りテキスト)
dat <- read.table("iris.csv", header=TRUE, sep=",", row.names="id")
dat

# タブ区切りテキスト
dat <- read.delim("iris.dat") # 一番楽
dat2 <- read.table("iris.dat", header=TRUE, row.names="id")
dat2

# file.choose()を使った場合
dat <- read.table(file.choose(), header=TRUE, row.names="id")
dat

# web
dat <- read.table("http://www.statlab.uni-heidelberg.de/data/iris/iris.txt", header=TRUE)
dat

上三角 or 下三角行列のデータを読み込む

# こんなデータ (shitadat.txt) を読み込む。参考はRjpwikiより。感謝。
x <- data.matrix(read.table("shitadat.txt", fill = TRUE, col.names = 1:9))
x

# 上三角行列にする。転置するだけ。
t(x)

# 対称行列をつける
  # まずNAを0にする
  x[is.na(x)] <- 0
  x
  # 上三角行列と足す。
  y <- x + t(x)
  # 対角線のところは2倍されているので割って対角線に代入
  diag(y) <- diag(y)/2
y

# クリップボードから上下三角行列を読みこむ。psychパッケージの関数を利用する。
  # shitadat.txt をクリップボードにコピーしたあと
library(psych)
read.clipboard.lower()
  # これだけで対照行列もつけたデータ行列にしてくれる。相変わらずWilliam Revelleは神である。Excelファイルでも同様。
  # 列の変数名はコピーしないこと。names引数はうまく機能しない。たぶんバグ

# semパッケージのread.moments関数はコンソールへ入力して読みこむ
library(sem)
x <- read.moments(diag=T)
1.000
0.591 1.000
0.356 0.350 1.000
-0.098 0.072 0.380 1.000
0.573 0.408 0.382 0.062 1.000
0.156 0.232 0.517 0.424 0.303 1.000
0.400 0.414 0.611 0.320 0.401 0.479 1.000
0.282 0.375 0.512 0.346 0.308 0.463 0.605 1.000
0.519 0.484 0.467 0.167 0.455 0.311 0.574 0.557 1.000
# 行をあけること
x

# 上三角、下三角行列をつくる。Paul JohnsonのTipsより。
# 上三角行列
cmat <- cor(iris[1:3])
cmat[lower.tri(cmat)] <- 0 # 上を作るときは"lower"
cmat
# 下三角行列
cmat <- cor(iris[1:3])
cmat[upper.tri(cmat)] <- 0
cmat


複数のデータファイルを読み込み、結合する

# 複数のデータファイルを一括してリストに読み込む
fnames <- dir(pattern=".csv") # とすると、作業ディレクトリ内のcsvファイルのみを選んでくれる
# fnamesp <- choose.files() # ファイルを選ぶ。パスのベクトルが保存される。リストの要素名には使いづらい
csvlist <- lapply(fnames, read.csv)
names(csvlist) <- fnames
csvlist

# 読み込んだcsvをマージする
n <- length(csvlist)
temp <- csvlist[[1]]
for (i in 2:n) {
temp <- merge(temp, csvlist[[i]], all=T)
}
res <- temp
res

## 青木先生のmerge.allを参考にした。感謝
http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc040/03212.html
merge.all <- function(...)
{
n <- length(list(...))
temp <- list(...)[[1]]
for (i in 2:n) {
temp <- merge(temp, list(...)[[i]], all=TRUE)
}
return(temp)
}


Excelファイル

# 1行目は変数名にする。
# sheet1からデータを読む
# データにスペースや空白セルがあるとエラー

# Excel上のデータをクリップボードに変数名も含めてコピーし、Rで読み込む場合
dat <- read.delim("clipboard")

# RODBCを使う
library(RODBC)
cn <- odbcConnectExcel("iris.xls")
sqlTables(cn) # シート名の確認
dat3 <- sqlFetch(cn, "sheet1")
odbcClose(cn)

# xlsReadWriteを使う
library(xlsReadWrite)
xls.getshlib() # これを実行しておかないとエラー
dat3.1 <- read.xls ("iris.xls") # ファイルのパスに日本語があるとエラーになる

# xlsxパッケージでExcel2007の.xlsxファイルを読み込む
library(xlsx)
file <- system.file("tests", "test_import.xlsx", package = "xlsx") # これを実行しておかないとエラー
dat3.2 <- read.xlsx("iris.xlsx", sheetIndex=1)

SPSSの.savファイルから

# foreignパッケージ
library(foreign)
dat4 <- read.spss("iris.sav", to.data.frame=T, max.value.labels=99)
dat4

PSPP: SPSSのフリー版を目指しているとか。SPSSのデータファイル~.savファイルを参照できる。
SPSS SmartViewer 15.0: SPSS15.0 以前の出力ビューアファイル(*.spo)の参照。
SPSS Smartreader 17.0: SPSS Statistics 17.0 の出力ビューアファイル(*.spv)の参照。

From SAS

# save SAS dataset in trasport format
libname out xport 'c:/mydata.xpt';
data out.mydata;
set sasuser.mydata;
run;

# in R
library(Hmisc)
mydata <- sasxport.get("c:/mydata.xpt")
# character variables are converted to R factors

From Stata

# input Stata file
library(foreign)
mydata <- read.dta("c:/mydata.dta")

From systat

# input Systat file
library(foreign)
mydata <- read.systat("c:/mydata.dta")



オブジェクトでの入出力

# オブジェクトの保存と読み込み
save(dat, file="dataobj.Rdata")
load("dataobj.Rdata")
   # これだけでdatというオブジェクト (保存時のオブジェクト名) が生成される。
# 別のオブジェクト名でにしたい場合は
x <- load("dataobj.rdata") # (x, file="dataobj.Rdata") は誤り。
rm(dat) # 作業スペースからオブジェクトを削除

# オブジェクトを日付・時間つきのファイル名で保存する。
save(iris, file=paste("iris", gsub(":", "_", Sys.time()), ".rdata", sep=""))