#######------------------------------------------------------------------------######
# make test data frame データフレーム作成
Sex = c("M", "M", "F", "F")
Age = c(20, 19, 18, 20)
height = c(170, 175, 160, 165)
weight = c(65, 75, 58, 60)
data = data.frame(Sex, Age, height, weight)
data #view check 確認 view check
rownames(data) # row name 行名(row=行)
colnames(data) # col name 列名(column=列)
nrow(data) #how many rows 行数を調べる(row)
ncol(data) #how many cols 列数を調べる(col)
is.data.frame(data) #judge Data Frame データフレームか調べる TRUE or FALSE
############ sampling col 列(col)を取り出す
data$height #データフレーム$列名 ベクトルで返る
data[ ,3] #データフレーム[,列番号] ベクトルで返る
data[ ,"height"] #データフレーム[,"列名"] ベクトルで返る
############ sampling row 行(row)を取り出す
data[2, ] #データフレーム[行番号,] ベクトルで返る
data["2", ] #データフレーム[行名,] ベクトルで返る
########## sampling more than one col or row 複数の列・行を取り出す
data[ ,c(1, 3)] #データフレーム[,c(列番号, 列番号)] ベクトルで返る
data[ ,c("Sex","height")] #データフレーム[,c(列名, 列名)] ベクトルで返る
data[c(2, 4), ] #データフレーム[,c(行番号, 行番号)] ベクトルで返る
data[c("2", "4"), ] #データフレーム[,c(行名, 行名)] ベクトルで返る
# pickup match data's rows 条件に合う行データのみ取り出す
data$height >= 170 # TRUE FALSE で返す
data[c(T, T, F, F), ] # 値を取り出す
data[data$height>=170, ] # 直接的に取り出すには これが最適 direct formula
# データフレームに列を付け加える ##################################
data1<- data #データフレームの複製
data1["new"] <- c("new", "new", "new", "old") #データフレームの無い列を指定して代入
data1 #確認
#データフレームに transform(DF, 列名=ベクトル) 関数を使う場合
data2<- data #データフレームの複製
data2<- transform(data2, eye=c("black", "brown", "blue", "brown"))
data2
#データフレームに cbind(DF, ベクトル) 列名調整必要
data3<- data #データフレームの複製
data3<- cbind(data3, c(5, 3, 4, 2))
names(data3) <- c("Sex","Age","height","weight","point") # 変数ラベルを調整
data3
# データフレームに 新しい列を計算で作る BMI=体重(kg)/身長(m)*身長(m) round(x,桁)
transform(data, BMI=round(data$weight/(data$height/100)^2, 1))
#データフレームにcbind()でデータフレームをつなぐ方法
data #確認
y <- data.frame(c=c(TRUE,TRUE,FALSE,FALSE)) #データフレーム作成
data4<- cbind(data, y)
data4
#####--データフレームを列の値をキーに繋ぐ--------------------------------------------
# データフレーム born を作る
name<- c("Moe","Larry","Curly","Harry")
year.born<- c(1887, 1902, 1903, 1964)
place.born<- c("Bensonhurst","Philadelphia","Brooklyn","Moscow")
born<- data.frame(name, year.born, place.born)
born
# データフレーム died を作る
name<- c("Curly","Moe","Larry") #繋げる
year.died<- c(1952, 1975, 1975)
died<-data.frame(name, year.died)
died
merge(born, died, by="name") # 2つのデータフレームを name を使って対応する行を結合