差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
memo:r:datamanipulationwithr [2013/05/03 07:07]
hasegawa
memo:r:datamanipulationwithr [2016/07/17 04:22] (現在)
ライン 37: ライン 37:
   format(DATE[1],​ '​%H'​) #​10進法で時間(24時間表示)を表示,Mで分,Sで秒   format(DATE[1],​ '​%H'​) #​10進法で時間(24時間表示)を表示,Mで分,Sで秒
  
-==== 日付型データと実数型の関係 ==== 
  
 ==== 任意の期間および時間の日付型データを生成する ==== ==== 任意の期間および時間の日付型データを生成する ====
ライン 63: ライン 62:
  
 ====== ベクトルの生成 ====== ====== ベクトルの生成 ======
-ループを回した結果を順にベクトル要素として保存したい場合がよくある.その場合,あらかじめnumerici()関数を使って繰り返し数と同じだけの長さで,全ての要素が0のベクトルを作れば良い+ループを回した結果を順にベクトル要素として保存したい場合がよくある.その場合,あらかじめnumeric()関数を使って繰り返し数と同じだけの長さで,全ての要素が0のベクトルを作れば良い
   res <- numeric(10)   res <- numeric(10)
   for (i in 1:10){   for (i in 1:10){
   res[i] <- i^2   res[i] <- i^2
   }   }
 +  res
 +
 +2013/​07/​31追記
 +NULLで初期化した方が楽で良いようだ.
 +  res <- NULL
 +  for (i in 1:10){
 +  res[i] <- i^2
 +  }
 +  res
 +
 +====== データフレーム dataframe ======
 +===== データフレームから任意の条件でデータを抽出 =====
 +
 +データフレームirisからSepal.Lengthの値が6より大きい行全体を抜き出す
 +  # subset関数を使う方法
 +  subset(x = iris, subset = Sepal.Length > 6)
 +  ​
 +  # データフレームの添字を使った要素へのアクセスを使う方法
 +  iris[iris$Sepal.Length > 6, ]
 +  ​
 +  # どちらも同じ結果を返す
 +  all.equal(subset(x = iris, subset = Sepal.Length > 6), iris[iris$Sepal.Length > 6, ])
 +
 +データフレームirisからSepal.Lengthの値が6より大きい行の,Speciesだけを抜き出す
 +  # subset関数を使う方法
 +  subset(x = iris, subset = Sepal.Length > 6, select=c("​Species"​))
 +  subset(x = iris, subset = Sepal.Length > 6, select=c(5)) ​ # "​Species"​の列番号が分かっていれば,数字で指定しても良い
 +  ​
 +  # データフレームの添字を使った要素へのアクセスを使う方法
 +  iris[iris$Sepal.Length > 6, "​Species"​]
 +  iris["​Sepal.Length"​ > 6, "​Species"​] ​ # これはダメ
 +  iris[iris$Sepal.Length > 6, 5]  # "​Species"​の列番号が分かっていれば,数字で指定しても良い
 +  iris[1 > 6, 5]  # これはダメ
 +  ​
 +  # どちらも本質的には同じ結果であるが,subsetを使った方はデータフレームで,添字を使った方はベクトルで結果が帰ってくる
 +  all.equal(subset(x = iris, subset = Sepal.Length > 6, select=c("​Species"​)),​ iris[iris$Sepal.Length > 6, "​Species"​])
 +時と場合によって使い分ければ良い
 +
 +===== リストと一致するものを取り出す =====
 +  # iris$Sepal.Lengthの度数分布
 +  table(iris$Sepal.Length)
 +  ​
 +  # iris$Sepal.Lengthが4.3,​ 4.4, 4.5, 4.6のいずれかに一致する行を抽出
 +  iris[iris$Sepal.Length %in% c(4.3, 4.4, 4.5, 4.6), ]
 +
 +実行結果
 +     ​Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 +  4           ​4.6 ​        ​3.1 ​         1.5         ​0.2 ​ setosa
 +  7           ​4.6 ​        ​3.4 ​         1.4         ​0.3 ​ setosa
 +  9           ​4.4 ​        ​2.9 ​         1.4         ​0.2 ​ setosa
 +  14          4.3         ​3.0 ​         1.1         ​0.1 ​ setosa
 +  23          4.6         ​3.6 ​         1.0         ​0.2 ​ setosa
 +  39          4.4         ​3.0 ​         1.3         ​0.2 ​ setosa
 +  42          4.5         ​2.3 ​         1.3         ​0.3 ​ setosa
 +  43          4.4         ​3.2 ​         1.3         ​0.2 ​ setosa
 +  48          4.6         ​3.2 ​         1.4         ​0.2 ​ setosa
 +
 +  # iris$Sepal.Lengthが4.3,​ 4.4, 4.5, 4.6のいずれかに一致しない行を抽出
 +  iris[!(iris$Sepal.Length %in% c(4.3, 4.4, 4.5, 4.6)), ]
 +
 +===== データフレーム行の並べ替え =====
 +  iris[order(iris$Sepal.Length),​ ]  # "​Sepal.Length"​の値で昇順に並べ替え
 +  iris[order(iris$Sepal.Length,​ decreasing=TRUE),​ ]  # "​Sepal.Length"​の値で降順に並べ替え
 +  iris[sample(nrow(iris)),​ ]  # ランダムに並べ替え
 +
 +===== データフレームの行と列の入れ替え =====
 +matrixの場合はt()関数が用意されているが,データフレームにはない(t()関数を適用出来るが,列名が変になることがある).簡単な処理なので関数にするまでもないが,あえて関数にすればこんな感じ.
 +  # データフレーム df の行と列を入れ替える関数
 +  TransposeDf <- function(df){
 +    # データフレームを転置
 +    tdf <- data.frame(t(df))
 +    # 行名と列名を付けなおす
 +    rownames(tdf) <- colnames(df)
 +    colnames(tdf) <- rownames(df)
 +    return(tdf)
 +  }
 +  ​
 +  # 実行例
 +  TransposeDf(df = iris)
 +
  
 ====== 行列 matirix ====== ====== 行列 matirix ======
ライン 96: ライン 175:
   )   )
 元々のデータフレームに"​ID_unit"​,"​Prob"​,"​Stratum"​列が追加され,"​Stratum"​が分割されたデータの属する層(この場合Species)を数字で表す.よって,SpeciesとStratumはサンプル毎に対応が取れている. 元々のデータフレームに"​ID_unit"​,"​Prob"​,"​Stratum"​列が追加され,"​Stratum"​が分割されたデータの属する層(この場合Species)を数字で表す.よって,SpeciesとStratumはサンプル毎に対応が取れている.
 +
 +----
  
 strata()関数について勘違いして,sizeオプションで分割後の各分割データに含まれる標本数を指定すると思っていたときに,元のデータ数と分割数に応じてsizeオプションに渡す数値ベクトルを計算するためのスクリプト.今となっては意味が無いが,一応残しておく strata()関数について勘違いして,sizeオプションで分割後の各分割データに含まれる標本数を指定すると思っていたときに,元のデータ数と分割数に応じてsizeオプションに渡す数値ベクトルを計算するためのスクリプト.今となっては意味が無いが,一応残しておく
ライン 109: ライン 190:
   rm(temp)   rm(temp)
   }   }
 +  ​
 +  strata.size
 +実行結果
 +  [1] 24 21 21 21 21 21 21
  
memo/r/datamanipulationwithr.1367564832.txt.gz · 最終更新: 2016/07/17 04:22 (外部編集)
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0

- Rental Orbit Space -