本文中では自分でコードを書くように指示がある部分

a <- 1 #数値1をオブジェクトaに代入
b <- 2 #数値2をオブジェクトbに代入
c <- a + b #a + bを実行しその結果の数値をオブジェクトcに代入

3.1.2 ベクトル

ベクトルを作ってみる

#simple generation of vectors
test_v <- c(1.0, 2.0, 2.5)
test2_v <- c("red", "yellow", "green")

ベクトルに保存されている値のタイプを確認

class(test_v)
[1] "numeric"
class(test2_v)
[1] "character"

もうひとつ数値ベクトルを作る

test3_v <- c(2.0, 3.0, 4.5)

ベクトル通しの簡単な演算(+, *, /, 内積)

test_v + test3_v  #要素ごとの足し算
[1] 3 5 7
test_v * test3_v #要素ごとの掛け算
[1]  2.00  6.00 11.25
test_v / test3_v #要素ごとの割り算
[1] 0.5000000 0.6666667 0.5555556
test_v %*% test3_v #内積
      [,1]
[1,] 19.25

3.1.3 行列とデータフレーム

3.1.3.1 データ保存のための主役:データフレーム

#ベクトルからデータフレームを作る
df1 <- data.frame(length = test_v, weight = test3_v)
#作ったデータフレームの中身を確かめる
df1

列名と行名

#現状の列名は?
colnames(df1)
[1] "length" "weight"
#現状の行名は?
rownames(df1)
[1] "1" "2" "3"
#行名を変える(ベクトルの中身を代入)
rownames(df1) <- test2_v
#変更を確認
df1

3.1.3.2データフレーム頻出ミス

#行数が合わない場合
rownames(df1) <- c("red", "blue")
Error in `.rowNamesDF<-`(x, value = value) :  無効な 'row.names' 長です 
#複数の行に同じ名前を付ける
rownames(df1) <- c("sample01", "sample01", "sample02")
 警告:  non-unique value when setting 'row.names': ‘sample01’Error in `.rowNamesDF<-`(x, value = value) : 
   重複した 'row.names' は許されません 
#列数が合わない場合
colnames(df1) <- c("length", "weight", "shape")
Error in names(x) <- value : 
  'names' attribute [3] must be the same length as the vector [2]

3.1.3.3 似て非なる行列・配列(matrix, array)

#もう一度データフレームを用意する
df1 <- data.frame(length = test_v, weight = test3_v)
rownames(df1) <- test2_v
df1
#行列に変換
mat1 <- as.matrix(df1)
#行列の中身を確認
mat1
       length weight
red       1.0    2.0
yellow    2.0    3.0
green     2.5    4.5
#オブジェクトのタイプを確認
class(mat1)
[1] "matrix" "array" 

行や列にアクセスする

#3行目だけにアクセス
df1[3, ]
mat1[3, ]
length weight 
   2.5    4.5 
#1列目だけにアクセス
df1[, 1]
[1] 1.0 2.0 2.5
mat1[, 1]
   red yellow  green 
   1.0    2.0    2.5 
#データフレームの場合のみ、列名でもアクセス可能
df1$length
[1] 1.0 2.0 2.5

3.1.4 リスト:複数のデータフレームを一つのオブジェクトで扱いたい

リストを生成して、各要素にデータを代入する

#空のリストを作成する
test_list <- list()
#1番目の要素にdf1(データフレーム)の中身を代入する
test_list[[1]] <- df1
#2番目の要素にmat1(行列)の中身を代入する
test_list[[2]] <- mat1
#3番目の要素に数値ベクトルを代入する
test_list[[3]] <- c(1,2,3,4)

リストの中身の確認法

#リスト全体を表示したい場合
test_list
[[1]]

[[2]]
       length weight
red       1.0    2.0
yellow    2.0    3.0
green     2.5    4.5

[[3]]
[1] 1 2 3 4
#一つの要素を表示したい場合
test_list[[3]]
[1] 1 2 3 4
#一つの要素を指定した場合、その要素のデータタイプのルールがそのまま適用されるので、たとえば要素1はデータフレームなので、$列名で特定の列にアクセスできる
test_list[[1]]$weight
[1] 2.0 3.0 4.5
#同じくデータフレームなので、[行名, 列名]でもアクセスできる
test_list[[1]][1,2]
[1] 2

3.3 エクセルからRへのデータの読み込み

CSVファイルからの読み込み

#read.csv関数を使う
test_data01 <- read.csv("./data_sample2.csv", header = T)
#中身の確認
test_data01

他のテキストフォーマットからの読み込み

#read.table関数を使う
test_data02 <- read.table("./20210810_04_day14.txt", skip = 13, header = T)
#中身の確認
test_data02
LS0tDQp0aXRsZTogImNoYXB0ZXIwMy5S44Gr5a++5b+c44GX44GfUiBOb3RlYm9vayINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyDmnKzmlofkuK3jgafjga/oh6rliIbjgafjgrPjg7zjg4njgpLmm7jjgY/jgojjgYbjgavmjIfnpLrjgYzjgYLjgovpg6jliIYNCmBgYHtyfQ0KYSA8LSAxICPmlbDlgKQx44KS44Kq44OW44K444Kn44Kv44OIYeOBq+S7o+WFpQ0KYiA8LSAyICPmlbDlgKQy44KS44Kq44OW44K444Kn44Kv44OIYuOBq+S7o+WFpQ0KYyA8LSBhICsgYiAjYSArIGLjgpLlrp/ooYzjgZfjgZ3jga7ntZDmnpzjga7mlbDlgKTjgpLjgqrjg5bjgrjjgqfjgq/jg4hj44Gr5Luj5YWlDQpgYGANCiMjIyAzLjEuMiDjg5njgq/jg4jjg6sNCuODmeOCr+ODiOODq+OCkuS9nOOBo+OBpuOBv+OCiw0KYGBge3J9DQojc2ltcGxlIGdlbmVyYXRpb24gb2YgdmVjdG9ycw0KdGVzdF92IDwtIGMoMS4wLCAyLjAsIDIuNSkNCnRlc3QyX3YgPC0gYygicmVkIiwgInllbGxvdyIsICJncmVlbiIpDQpgYGANCuODmeOCr+ODiOODq+OBq+S/neWtmOOBleOCjOOBpuOBhOOCi+WApOOBruOCv+OCpOODl+OCkueiuuiqjQ0KYGBge3J9DQpjbGFzcyh0ZXN0X3YpDQpjbGFzcyh0ZXN0Ml92KQ0KYGBgDQrjgoLjgYbjgbLjgajjgaTmlbDlgKTjg5njgq/jg4jjg6vjgpLkvZzjgosNCmBgYHtyfQ0KdGVzdDNfdiA8LSBjKDIuMCwgMy4wLCA0LjUpDQpgYGANCiMjIyMg44OZ44Kv44OI44Or6YCa44GX44Gu57Ch5Y2Y44Gq5ryU566XKCssICosIC8sIOWGheepjSkNCmBgYHtyfQ0KdGVzdF92ICsgdGVzdDNfdiAgI+imgee0oOOBlOOBqOOBrui2s+OBl+eulw0KdGVzdF92ICogdGVzdDNfduOAgCPopoHntKDjgZTjgajjga7mjpvjgZHnrpcNCnRlc3RfdiAvIHRlc3QzX3bjgIAj6KaB57Sg44GU44Go44Gu5Ymy44KK566XDQp0ZXN0X3YgJSolIHRlc3QzX3bjgIAj5YaF56mNDQpgYGANCiMjIyAzLjEuMyAg6KGM5YiX44Go44OH44O844K/44OV44Os44O844OgDQojIyMjIDMuMS4zLjEg44OH44O844K/5L+d5a2Y44Gu44Gf44KB44Gu5Li75b25OuODh+ODvOOCv+ODleODrOODvOODoA0KYGBge3J9DQoj44OZ44Kv44OI44Or44GL44KJ44OH44O844K/44OV44Os44O844Og44KS5L2c44KLDQpkZjEgPC0gZGF0YS5mcmFtZShsZW5ndGggPSB0ZXN0X3YsIHdlaWdodCA9IHRlc3QzX3YpDQoj5L2c44Gj44Gf44OH44O844K/44OV44Os44O844Og44Gu5Lit6Lqr44KS56K644GL44KB44KLDQpkZjENCmBgYA0K5YiX5ZCN44Go6KGM5ZCNDQpgYGB7cn0NCiPnj77nirbjga7liJflkI3jga/vvJ8NCmNvbG5hbWVzKGRmMSkNCiPnj77nirbjga7ooYzlkI3jga/vvJ8NCnJvd25hbWVzKGRmMSkNCiPooYzlkI3jgpLlpInjgYjjgoso44OZ44Kv44OI44Or44Gu5Lit6Lqr44KS5Luj5YWlKQ0Kcm93bmFtZXMoZGYxKSA8LSB0ZXN0Ml92DQoj5aSJ5pu044KS56K66KqNDQpkZjENCmBgYA0KIyMjIyAzLjEuMy4y44OH44O844K/44OV44Os44O844Og6aC75Ye644Of44K5DQpgYGB7cn0NCiPooYzmlbDjgYzlkIjjgo/jgarjgYTloLTlkIgNCnJvd25hbWVzKGRmMSkgPC0gYygicmVkIiwgImJsdWUiKQ0KYGBgDQpgYGB7cn0NCiPopIfmlbDjga7ooYzjgavlkIzjgZjlkI3liY3jgpLku5jjgZHjgosNCnJvd25hbWVzKGRmMSkgPC0gYygic2FtcGxlMDEiLCAic2FtcGxlMDEiLCAic2FtcGxlMDIiKQ0KYGBgDQoNCmBgYHtyfQ0KI+WIl+aVsOOBjOWQiOOCj+OBquOBhOWgtOWQiA0KY29sbmFtZXMoZGYxKSA8LSBjKCJsZW5ndGgiLCAid2VpZ2h0IiwgInNoYXBlIikNCmBgYA0KIyMjIyAzLjEuMy4zIOS8vOOBpumdnuOBquOCi+ihjOWIl+ODu+mFjeWIlyhtYXRyaXgsIGFycmF5KQ0KYGBge3J9DQoj44KC44GG5LiA5bqm44OH44O844K/44OV44Os44O844Og44KS55So5oSP44GZ44KLDQpkZjEgPC0gZGF0YS5mcmFtZShsZW5ndGggPSB0ZXN0X3YsIHdlaWdodCA9IHRlc3QzX3YpDQpyb3duYW1lcyhkZjEpIDwtIHRlc3QyX3YNCmRmMQ0KI+ihjOWIl+OBq+WkieaPmw0KbWF0MSA8LSBhcy5tYXRyaXgoZGYxKQ0KI+ihjOWIl+OBruS4rei6q+OCkueiuuiqjQ0KbWF0MQ0KI+OCquODluOCuOOCp+OCr+ODiOOBruOCv+OCpOODl+OCkueiuuiqjQ0KY2xhc3MobWF0MSkNCmBgYA0K6KGM44KE5YiX44Gr44Ki44Kv44K744K544GZ44KLDQpgYGB7cn0NCiMz6KGM55uu44Gg44GR44Gr44Ki44Kv44K744K5DQpkZjFbMywgXQ0KbWF0MVszLCBdDQojMeWIl+ebruOBoOOBkeOBq+OCouOCr+OCu+OCuQ0KZGYxWywgMV0NCm1hdDFbLCAxXQ0KI+ODh+ODvOOCv+ODleODrOODvOODoOOBruWgtOWQiOOBruOBv+OAgeWIl+WQjeOBp+OCguOCouOCr+OCu+OCueWPr+iDvQ0KZGYxJGxlbmd0aA0KYGBgDQojIyMgMy4xLjQg44Oq44K544OI77ya6KSH5pWw44Gu44OH44O844K/44OV44Os44O844Og44KS5LiA44Gk44Gu44Kq44OW44K444Kn44Kv44OI44Gn5omx44GE44Gf44GEDQojIyMjIOODquOCueODiOOCkueUn+aIkOOBl+OBpuOAgeWQhOimgee0oOOBq+ODh+ODvOOCv+OCkuS7o+WFpeOBmeOCiw0KYGBge3J9DQoj56m644Gu44Oq44K544OI44KS5L2c5oiQ44GZ44KLDQp0ZXN0X2xpc3QgPC0gbGlzdCgpDQojMeeVquebruOBruimgee0oOOBq2RmMSjjg4fjg7zjgr/jg5Xjg6zjg7zjg6Ap44Gu5Lit6Lqr44KS5Luj5YWl44GZ44KLDQp0ZXN0X2xpc3RbWzFdXSA8LSBkZjENCiMy55Wq55uu44Gu6KaB57Sg44GrbWF0MSjooYzliJcp44Gu5Lit6Lqr44KS5Luj5YWl44GZ44KLDQp0ZXN0X2xpc3RbWzJdXSA8LSBtYXQxDQojM+eVquebruOBruimgee0oOOBq+aVsOWApOODmeOCr+ODiOODq+OCkuS7o+WFpeOBmeOCiw0KdGVzdF9saXN0W1szXV0gPC0gYygxLDIsMyw0KQ0KYGBgDQojIyMjIOODquOCueODiOOBruS4rei6q+OBrueiuuiqjeazlQ0KYGBge3J9DQoj44Oq44K544OI5YWo5L2T44KS6KGo56S644GX44Gf44GE5aC05ZCIDQp0ZXN0X2xpc3QNCiPkuIDjgaTjga7opoHntKDjgpLooajnpLrjgZfjgZ/jgYTloLTlkIgNCnRlc3RfbGlzdFtbM11dDQoj5LiA44Gk44Gu6KaB57Sg44KS5oyH5a6a44GX44Gf5aC05ZCI44CB44Gd44Gu6KaB57Sg44Gu44OH44O844K/44K/44Kk44OX44Gu44Or44O844Or44GM44Gd44Gu44G+44G+6YGp55So44GV44KM44KL44Gu44Gn44CB44Gf44Go44GI44Gw6KaB57SgMeOBr+ODh+ODvOOCv+ODleODrOODvOODoOOBquOBruOBp+OAgSTliJflkI3jgafnibnlrprjga7liJfjgavjgqLjgq/jgrvjgrnjgafjgY3jgosNCnRlc3RfbGlzdFtbMV1dJHdlaWdodA0KI+WQjOOBmOOBj+ODh+ODvOOCv+ODleODrOODvOODoOOBquOBruOBp+OAgVvooYzlkI0sIOWIl+WQjV3jgafjgoLjgqLjgq/jgrvjgrnjgafjgY3jgosNCnRlc3RfbGlzdFtbMV1dWzEsMl0NCmBgYA0KIyMjIDMuMyDjgqjjgq/jgrvjg6vjgYvjgolS44G444Gu44OH44O844K/44Gu6Kqt44G/6L6844G/DQojIyMjIENTVuODleOCoeOCpOODq+OBi+OCieOBruiqreOBv+i+vOOBvw0KYGBge3J9DQojcmVhZC5jc3bplqLmlbDjgpLkvb/jgYYNCnRlc3RfZGF0YTAxIDwtIHJlYWQuY3N2KCIuL2RhdGFfc2FtcGxlMi5jc3YiLCBoZWFkZXIgPSBUKQ0KI+S4rei6q+OBrueiuuiqjQ0KdGVzdF9kYXRhMDENCmBgYA0KDQojIyMjIOS7luOBruODhuOCreOCueODiOODleOCqeODvOODnuODg+ODiOOBi+OCieOBruiqreOBv+i+vOOBvw0KYGBge3J9DQojcmVhZC50YWJsZemWouaVsOOCkuS9v+OBhg0KdGVzdF9kYXRhMDIgPC0gcmVhZC50YWJsZSgiLi8yMDIxMDgxMF8wNF9kYXkxNC50eHQiLCBza2lwID0gMTMsIGhlYWRlciA9IFQpDQoj5Lit6Lqr44Gu56K66KqNDQp0ZXN0X2RhdGEwMg0KYGBgDQoNCg0KDQoNCg0K