狠狠撸

狠狠撸Share a Scribd company logo
R言語超初心者
3. 行列と
データフレーム
鈴木禎子
株式会社Joe’sクラウドコンピューティング
この章の内容
1. クラス matrix
2. クラス dataframe
3. データフレームの併合
4. 関数 names
5. 関数 apply
クラス matrix
a<-c(1,10,100,1000,10000,100000)
x.matrix<-matrix(a, nrow=2, ncol=3); x.matrix 成分がaの行列を生成
x.matrix[1,2] 行列x.matixの(1,2)成分
x.matrix[1:4] 行列x.matixの1番目から4番目までの成分
x.1.row<-x.matrix[1,]; x.2.row<-x.matrix[2,] 1行目と2行目を抽出
x.1.row; x.2.row; rbind(x.1.row,x.2.row) 1行目と2行目を結合して行列を得る
x.1.column<-x.matrix[,1]; x.2.column<-x.matrix[,2]; x.3.column<-x.matrix[,3]
1列目と2列目と3列目を抽出
x.1.column; x.2.column; x.3.column; cbind(x.1.column,x.2.column,x.3.column)
1列目と2列目と3列目を結合して行列を得る
1/x.matrix 各成分をその逆数に変換
y.matrix<-x.matrix[1:2,1:2]; y.matrix
x.matrixの1,2行目、1,2列目からy.maxを生成
t(y.matrix) 転置行列を生成
dim(x.matrix) x.matrixの次元を抽出
nrow(x.matrix); ncol(x.matrix) x.matrixの行数、列数
matrix(1, nrow=2, ncol=3) すべての成分が1の行列
matrix(1:2, nrow=2, ncol=3); matrix(1:2, nrow=2, ncol=3, byrow=TRUE)
1,2を交互に成分にもつ行列(列で見る場合と行で見る場合)
y.matrix[1:2,1:2] <- c(1, 2, 3, 4); y.matrix
最初の2行2列が1,2,3,4のy.matrixを生成
y.matrix[y.matrix%%2==0] 値が偶数の要素を抽出
y.matrix[y.matrix%%2==0] <- 0; y.matrix 値が偶数の成分を0に変換
クラス dataframe
id<-1:10
x<-rep("女",5); y<-rep("男",5); sex<-c(x,y)
x<-rnorm(5, mean=157, sd=8); y<-rnorm(5, mean=170, sd=10); height<-round(c(x,y), digits = 1)
x<-rnorm(5, mean=50, sd=5); y<-rnorm(5, mean=65, sd=7); weight<-round(c(x,y), digits = 1)
data.frame.0 <- data.frame(ID=id, 性別=sex, 身長=height, 体重=weight); data.frame.0
is.data.frame(data.frame.0); is.list(data.frame.0)
ID 性別 身長 体重
1 女 157 51
2 女 162 56
?
?
?
?
?
?
?
?
10 男 179 75
Id, sex, weightは長さ10のベクトル
ID, 性別, 身長, 体重は、各ベクトルの名前
data.frame.0$身長 身長のベクトル
data.frame.0[[3]] 3番目のベクトル(=身長)
data.frame.0[,2:3] 2列目、3列目からなるデータフレーム
data.frame.0[3:4,] 3行目、4行目からなるデータフレーム
mean(data.frame.0$体重) 体重のベクトルの平均
mean(data.frame.0$身長[6:10]) 身長のベクトルの6番目から10番目の平均
data.frame.0[data.frame.0$身長 >= 170,]
身長がベクトルで170以上の行からなるデータフレーム
subset(data.frame.0, ID>3) ID>3なる行からなるデータフレーム
sortlist <- order(data.frame.0$体重); data.frame.0[sortlist,] 体重の小さい順に並べる
data.frame.0[[2]] <- NULL 性別のベクトルをNULLにする
data.frame.0 <- edit(data.frame.0) data.frame.0を編集する画面がポップアップする
data.frame.0
データフレームの併合
id.1 <- c(1,2,4,5,7,8,10); data.frame.1 <- data.frame(ID=id.1, 身長=height[id.1]);
id.2 <- c(1,3,5,7,9); data.frame.2<- data.frame(ID=id.2, 体重=weight[id.2]);
data.frame.1; data.frame.2
data.frame.3 <-merge(data.frame.1, data.frame.2); data.frame.3
data.frame.3 <-merge(data.frame.1, data.frame.2, by="ID", all=TRUE); data.frame.3
ID 性別 身長
1 女 157
2 女 162
4 女 152
5 女 169
7 男 181
8 男 175
10 男 171
ID 性別 体重
1 女 51
3 女 56
5 女 52
7 男 75
9 男 70
ID 性別 身長 体重
1 女 157 51
5 女 169 52
7 男 181 75
ID 性別 身長 体重
1 女 157 51
2 女 162 NA
3 女 NA 56
4 女 152 NA
5 女 169 52
7 男 181 75
8 男 175 NA
9 男 NA 75
10 男 171 NA
関数 names
u.names <- c(“体重”, “身長”, “BMI”) ベクトルの各要素の位置に名前をつける
u.vector <- c(58, 172, 20); names(u.vector) <- u.names; u.vector
u.vector[“BMI”]
u.data.frame<-data.frame(id, sec,weight); u.data.frame
データフレームの各ベクトルは名前がなくてもよい
name(u.data.frame)<-u.names; u.data.frame
namesで各ベクトルに名前をつける
rownames(x.matrix) <- c("上", "下"); colnames(x.matrix) <- c("左", "中", "右")
x.matrix
x.matrix[“上”,“右”]
行列の場合、rownames, colnamesで行と列を指定
関数 apply
apply(x.matrix, 1, sum)
各行内の和
のベクトル
apply(x.matrix, 2, mean)
各列内
の平均
apply(x.matrix, c(1,2), sqrt)
各成分の
平方根

More Related Content

Rの初歩: 3. 行列とデータフレーム

  • 2. この章の内容 1. クラス matrix 2. クラス dataframe 3. データフレームの併合 4. 関数 names 5. 関数 apply
  • 3. クラス matrix a<-c(1,10,100,1000,10000,100000) x.matrix<-matrix(a, nrow=2, ncol=3); x.matrix 成分がaの行列を生成 x.matrix[1,2] 行列x.matixの(1,2)成分 x.matrix[1:4] 行列x.matixの1番目から4番目までの成分 x.1.row<-x.matrix[1,]; x.2.row<-x.matrix[2,] 1行目と2行目を抽出 x.1.row; x.2.row; rbind(x.1.row,x.2.row) 1行目と2行目を結合して行列を得る x.1.column<-x.matrix[,1]; x.2.column<-x.matrix[,2]; x.3.column<-x.matrix[,3] 1列目と2列目と3列目を抽出 x.1.column; x.2.column; x.3.column; cbind(x.1.column,x.2.column,x.3.column) 1列目と2列目と3列目を結合して行列を得る
  • 4. 1/x.matrix 各成分をその逆数に変換 y.matrix<-x.matrix[1:2,1:2]; y.matrix x.matrixの1,2行目、1,2列目からy.maxを生成 t(y.matrix) 転置行列を生成 dim(x.matrix) x.matrixの次元を抽出 nrow(x.matrix); ncol(x.matrix) x.matrixの行数、列数 matrix(1, nrow=2, ncol=3) すべての成分が1の行列 matrix(1:2, nrow=2, ncol=3); matrix(1:2, nrow=2, ncol=3, byrow=TRUE) 1,2を交互に成分にもつ行列(列で見る場合と行で見る場合) y.matrix[1:2,1:2] <- c(1, 2, 3, 4); y.matrix 最初の2行2列が1,2,3,4のy.matrixを生成 y.matrix[y.matrix%%2==0] 値が偶数の要素を抽出 y.matrix[y.matrix%%2==0] <- 0; y.matrix 値が偶数の成分を0に変換
  • 5. クラス dataframe id<-1:10 x<-rep("女",5); y<-rep("男",5); sex<-c(x,y) x<-rnorm(5, mean=157, sd=8); y<-rnorm(5, mean=170, sd=10); height<-round(c(x,y), digits = 1) x<-rnorm(5, mean=50, sd=5); y<-rnorm(5, mean=65, sd=7); weight<-round(c(x,y), digits = 1) data.frame.0 <- data.frame(ID=id, 性別=sex, 身長=height, 体重=weight); data.frame.0 is.data.frame(data.frame.0); is.list(data.frame.0) ID 性別 身長 体重 1 女 157 51 2 女 162 56 ? ? ? ? ? ? ? ? 10 男 179 75 Id, sex, weightは長さ10のベクトル ID, 性別, 身長, 体重は、各ベクトルの名前
  • 6. data.frame.0$身長 身長のベクトル data.frame.0[[3]] 3番目のベクトル(=身長) data.frame.0[,2:3] 2列目、3列目からなるデータフレーム data.frame.0[3:4,] 3行目、4行目からなるデータフレーム mean(data.frame.0$体重) 体重のベクトルの平均 mean(data.frame.0$身長[6:10]) 身長のベクトルの6番目から10番目の平均 data.frame.0[data.frame.0$身長 >= 170,] 身長がベクトルで170以上の行からなるデータフレーム subset(data.frame.0, ID>3) ID>3なる行からなるデータフレーム sortlist <- order(data.frame.0$体重); data.frame.0[sortlist,] 体重の小さい順に並べる data.frame.0[[2]] <- NULL 性別のベクトルをNULLにする data.frame.0 <- edit(data.frame.0) data.frame.0を編集する画面がポップアップする data.frame.0
  • 7. データフレームの併合 id.1 <- c(1,2,4,5,7,8,10); data.frame.1 <- data.frame(ID=id.1, 身長=height[id.1]); id.2 <- c(1,3,5,7,9); data.frame.2<- data.frame(ID=id.2, 体重=weight[id.2]); data.frame.1; data.frame.2 data.frame.3 <-merge(data.frame.1, data.frame.2); data.frame.3 data.frame.3 <-merge(data.frame.1, data.frame.2, by="ID", all=TRUE); data.frame.3 ID 性別 身長 1 女 157 2 女 162 4 女 152 5 女 169 7 男 181 8 男 175 10 男 171 ID 性別 体重 1 女 51 3 女 56 5 女 52 7 男 75 9 男 70 ID 性別 身長 体重 1 女 157 51 5 女 169 52 7 男 181 75 ID 性別 身長 体重 1 女 157 51 2 女 162 NA 3 女 NA 56 4 女 152 NA 5 女 169 52 7 男 181 75 8 男 175 NA 9 男 NA 75 10 男 171 NA
  • 8. 関数 names u.names <- c(“体重”, “身長”, “BMI”) ベクトルの各要素の位置に名前をつける u.vector <- c(58, 172, 20); names(u.vector) <- u.names; u.vector u.vector[“BMI”] u.data.frame<-data.frame(id, sec,weight); u.data.frame データフレームの各ベクトルは名前がなくてもよい name(u.data.frame)<-u.names; u.data.frame namesで各ベクトルに名前をつける rownames(x.matrix) <- c("上", "下"); colnames(x.matrix) <- c("左", "中", "右") x.matrix x.matrix[“上”,“右”] 行列の場合、rownames, colnamesで行と列を指定
  • 9. 関数 apply apply(x.matrix, 1, sum) 各行内の和 のベクトル apply(x.matrix, 2, mean) 各列内 の平均 apply(x.matrix, c(1,2), sqrt) 各成分の 平方根