データの選択・除外・抽出etc
変数や値を選んだり除外したりする。
# 例示データ
	mydata <- data.frame(matrix(sample(1:100, 100, replace=T), nr=10, dimnames=list(c(1:10), c(paste("v", 1:10, sep="")))))
	mydata
	
変数の選択
# select variables v1, v2, v3
					myvars <- c("v1", "v2", "v3")
					newdata <- mydata[myvars]
					newdata
					
					# another method
					myvars <- paste("v", 1:3, sep="")
					newdata <- mydata[myvars]
					newdata
					
				# select 1st and 5th thru 10th variables
				newdata <- mydata[c(1,5:10)] 
					newdata
変数の除外
# exclude variables v1, v2, v3
					myvars <- names(myvars) %in% c("v1", "v2", "v3")
						
				newdata <- mydata[!myvars]
					newdata
				
				# exclude 3rd and 5th variable 
				newdata <- mydata[c(-3,-5)]
					newdata
				
				# delete variables v3 and v5
				newdata <- mydata
				newdata
				newdata$v3 <- newdata$v5 <- NULL
				newdata
				
観測値の選択
				# 性別データ、年齢データ追加
				mydata <- data.frame(matrix(sample(1:100, 100, replace=T), nr=10, dimnames=list(c(1:10), c(paste("v", 1:10, sep="")))))
				gender <- sample(c("M", "F"), 10, replace=T)
				age <- sample(20:80, 10, replace=T)
				mydata <- data.frame(mydata, gender, age)
				mydata
				
				
				# first 5 observerations
					newdata <- mydata[1:5,]
				newdata
					
					# based on variable values
			newdata <- mydata[ which(mydata$gender=='F' 
			& mydata$age > 65), ]
				newdata
				
				# or
				attach(newdata)
				newdata <- mydata[ which(gender=='F' & age > 65),]
				newdata
				detach(newdata)
				
subset関数で選択する
一番簡単マジお勧め
# サンプルデータ
				ID <- 1:100
				age <- sample(5:60, 100, replace=T)
				sex <- sample(c("m", "f"), 100, replace=T)
				weight <- sample(20:150, 100)
				height <- sample(20:150, 100)
				income <- sample(20000:150000, 100)
				mydata <- data.frame(ID, age, sex, weight, height, income)
				mydata
				
				# ageが20以上 or 10未満の人のID, weightだけもってくる
				newdata <- subset(mydata, age >= 20 | age < 10, select=c(ID, weight))
				newdata
				
				# 25歳以上の男性でweight~incomeまでの変数をもってくる。等号を使うときはイコールを2つにすること
				newdata <- subset(mydata, sex=="m" & age > 25, select=weight:income)
				newdata
			
			## 例2 ##
			# サンプルデータ
			  dat <- data.frame(id= paste("ps", 1:20, sep=""), sex=sample(c("m", "f"), 20, replace=T), age=sample(20:70, 20, replace=T))
			# 男性だけ取り出す
			subset(dat, sex=="m")
			# 30以上70以下だけ取り出す
			subset(dat, age>=30 & age<=70)
			# 30以上70以下の男性だけ取り出す
			subset(dat, sex=="m" & (age>=30 & age<=70))
			# 30以上70以下の男性のidだけ取り出す。select引数を使う
			subset(dat, sex=="m" & (age>=30 & age<=70), select=id)
			
			
無作為抽出
sample関数を使う
				# ランダムサンプリング sample
				sample(x=ベクトル, size=総数, replace=F:同じ要素が選ばれても良いか, prob=NULL:確率ベクトル
				## 5件法のデータを100個生成する
				sample(x=5, size=100, replace=T)
				## prob引数。確率ベクトルとして3が半分とかのデータにする。デフォルトは一様
				p <- c(0.1, 0.1, 0.5, 0.1, 0.2)
				table(sample(x=5, size=100, replace=T, prob=p)) # tableで集計
				
Going Further
サンプリングに関しては、sampling パッケージや、, survey パッケージ + ウェブサイト(複雑な調査データの解析) 、 bootstrapping (本サイト内) も参照のこと (とQuick-Rに書いてあった) 。
その他
データの一括置換
		# NAを"UN"に置換する
		dat[is.na(dat)] <- "UN"
		
		# 0 をNAに置換する
		0をnaに置換する: dat[dat==0]
	
因子変数と数値変数が混在しているデータフレームで、因子だけのと数値だけのデータフレームに分ける
		# サンプルデータの準備
		  f1 <- sample(letters[1:5], 20, replace=T)
		  f2 <- ordered(sample(letters[11:15], 20, replace=T))
		  f2["Levels"] # これは順序変数にしてみよう
		  n1 <- sample(500:1000, 20, replace=T)
		  n2 <- sample(rnorm(100), 20, replace=T)
		  f3 <- sample(letters[21:25], 20, replace=T)
		  dat <- data.frame(f1, f2, n1, n2, f3)
		  summary(dat)
		  sapply(dat, class)
		# 因子変数はdatfへ、それ以外 (数値) はdatiへ
		fcol <- grep("factor", sapply(dat, class))
		datf <- dat[,c(fcol)]
		dati <- dat[,-c(fcol)]
		datf
		dati
	
重複するデータを除く
		# サンプルデータの準備
		  (dat <- data.frame(
		  id=gl(5, 10, labels=c("s1", "s2", "s3", "s4", "s5")),
		  sex=rep(c("f", "f", "m", "m", "f"), each=10),
		  age=rep(c(18:22), each=10)
		  ))
		aggregate(dat[2:3], list(dat[,1]), function(x) x[1])
	
データの中央値分割
			nx <- x
			nx[x >= median(x)] <- "high"
			nx[x < median(x)] <- "low"
			nx <- factor(nx)
			summary(nx)
			
その他抽出
				# 行列、データフレームの先頭、末尾をとりだす
				head(dat)
				tail(dat)
				# 特定の行、列を除いたり、逆に取り出したりする
				dat[-2,] # 2行目を除く
				dat[,-2] # 2列目を除く
				dat[c(1,3,5),] # 1,3,5行を取り出す
				dat[,c(1:10)] # 1列目から10列目までを取り出す
				# 特定のデータを取り出す
				x <- sample(1:5, 100, replace=T)
				## 1だけ取り出す
				x[x==1]
				## 1がいくつかるか数えるには
				x==1 # こうするとTRUE/FALSEが返される
				sum(x==1) # T/Fは01データとしても扱われるのでsumで調べることができる
				which(x==1) # ベクトル内の位置を返す