トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

R.tips

*disclaimer
42714

42713
R

R.tips Rを使う時のちょっとしたこと

 作業の開始 一連の手順

  1. データを読み込んで read.table("clipboard", header=T)
  2. 読み込んだデータを確認する
    1. 中身を少し見てみる head()
    2. 全体の規模を見てみる dim()
    3. どのタイプのデータ形式になっているか class()
#クリップボードからデータの貼り付け
cn <- read.table("clipboard", header=T)

> head(cn)
  ID year file
1  1    2    1
2  2    2    1
3  3    2    1
4  4    2    1
5  5    2    1
6  6    2    1
> dim(cn)
[1] 2408    9
> class(cn)
[1] "data.frame"

 作業の中断と継続(RStudioを使わない場合)

作業をしているプロジェクトごとにファイルを保存しておく

終わる前に保存するファイル(パソコン内のプロジェクトのフォルダー内に日付などをつけて保存する)

  1. 「ファイル」から「作業スペースの保存」
  2. 「ファイル」から「履歴の保存」
  3. 「ファイル」から「ファイルを保存」
  4. Rとは別に、エディターなどで作業記録を保存しておくファイルも保存

作業の再開時に(パソコン内のプロジェクトのフォルダー内から選んで開く)

  1. 「ファイル」から「作業スペースの読み込み」
  2. 「ファイル」から「履歴の読み込み」
  3. エディターなどで作業記録を保存しておいたファイルも開く

パソコン内のプロジェクトのフォルダー

  1. Rを起動しておいて、そのコンソールに、そのフォルダー内の「.RData」をDrag&Dropすればよい。
  2. その後、そのパスの情報を使って、setwd()で、フォルダー内に作業ディレクトリを変更する。
  3. その後、「履歴の読み込み」をする。


作業記録のファイルに実施した命令や出力結果を、自分のメモとともに、コピペしていく。

 テキスト処理の前処理

  • アポストロフィーの記号「'」:目的に合わせて方針を決めて処理する。記号類に含めてしまうのも手。
    • 縮約形
    • 所有格
    • 引用符
  • 記号類の削除
x <- gsub("[[:punct:]]", " ", x)
  • 重複するスペースやタブ(whitespace)をスペース一つに
x <- gsub("[[:space:]]+", " ", x)
    • 行頭のスペースの削除
x <- gsub("^ ", "", x)
    • 行末のスペースの削除
x <- gsub(" $", "", x)
  • 全部小文字に
x <- tolower(x)

 どんな命令(関数)なのか、どんなオプションがあるのか確認 help(関数)

help(sort)

sortのオプションがわかる

 tips

Rのアップデート

installr::updateR()

データの種類

    • numeric (数値)
    • character(文字列)
    • factor (因子) カテゴリー変数の「水準(level)」
    • logical (論理値)

データの型(構造) class()

    • ベクトル:一次元・一種類の要素の連なり
      • c()
    • 行列  :二次元・一種類の要素の連なり
      • matrix()
    • 配列  :多次元・一種類の要素の連なり
      • array()
    • リスト :二次元の要素の連なり。違う種類も可。
      • list()
    • データフレーム:二次元の要素の連なり。違う種類も可。
      • data.frame()

データの次元 dim()

> dim(fragNSnozeroMW)
[1] 32  2
  • 32行・2列 とわかる。

データフレームの操作例

  • あるデータフレームの中の特定の列と特定の列だけを取り出して、新しいデータフレームを作る。

  1. data.frame()
  2. colnames()
  3. 特定の列と特定の列の計算結果を新たな列にして追加
    1. 単に列と列を使った式を書いて、新たな列名をしてすれば自動的に新たな列名で結果が追加される
> head(jpn.4)
        file Score Token Type NoS       TTR       GI     MATTR      AWL      ASL
1 JPN501.txt     4   319  135  30 0.4231975 7.558549 0.5921317 4.304075 10.63333
2 JPN502.txt     4   356  161  29 0.4522472 8.532983 0.6649157 4.233146 12.27586
3 JPN503.txt     3   201  121  13 0.6019900 8.534682 0.7170149 4.746269 15.46154
4 JPN504.txt     4   260  140  27 0.5384615 8.682431 0.6877692 4.761538  9.62963
5 JPN505.txt     4   420  175  25 0.4166667 8.539126 0.6341905 3.995238 16.80000
6 JPN506.txt     3   261  124  20 0.4750958 7.675407 0.6390038 4.072797 13.05000
> jpn.tt <- data.frame(jpn.4$Type, jpn.4$Token)
> head(jpn.tt)
  jpn.4.Type jpn.4.Token
1        135         319
2        161         356
3        121         201
4        140         260
5        175         420
6        124         261
> colnames(jpn.tt) <- c("type", "token")
> head(jpn.tt)
  type token
1  135   319
2  161   356
3  121   201
4  140   260
5  175   420
6  124   261
> jpn.tt$ttr <- jpn.tt$type / jpn.tt$token
> head(jpn.tt)
  type token       ttr
1  135   319 0.4231975
2  161   356 0.4522472
3  121   201 0.6019900
4  140   260 0.5384615
5  175   420 0.4166667
6  124   261 0.4750958

  • 欠損値を見つける関数 is.na()

  • データ中の特定の行を外すには、行の要素番号にマイナス記号をつける。
data[-56,]
    • 複数ある場合は、
data[c(-56,-159)] 

  • 要素に重複がある場合に重複をなくす。unique()
    • 事前にソートしておかなくてもよい点に注意

二つのデータセットの差異 intersect(), setdiff()

  • 共通部分 intersect
    • ただし、共通する要素自体が重複する場合は一つしか表示されないので注意
intersect(x, y)
  • 相違部分 setdiff
    • どっちを前にするかで結果が違うので注意
setdiff(x, y)
      • xにだけあるもの
setdiff(y, x)
      • yにだけあるもの

既存のスクリプトの読み込み source(choose.files())


データを読み込んだ時の「Read ... items」の表示を出ないようにする。scan( , quiet = T)


現在の作業ディレクトリーはどこか: getwd()


作業ディレクトリーの変更:setwd("行き先")

    • 「行き先」は現在の作業ディレクトリーからみた相対的な位置(フォルダー名など)
      • 一つ上に行くには、setwd("..") と、ドット二つ
    • 横のディレクトリーに移る(例えば、今、Aというフォルダーにいて、隣のBに移る)には、
      • いったん、上に行って、その下のディレクトリーを指定するか、
      • setwd("../B") と、..で上に行った後、その下のディレクトリーを続けて指定すればよい。
    • いずれにせよ、ディレクトリーを移動したら、
      • 今いるディレクトリーの確認 getwd()
      • そこにあるファイルの一覧の確認 list.files() をすること。
  • Windowsの場合、目的とするフォルダーが深いと、そこまで入力するのが面倒。
    • フォルダーを開いていって、そのディレクトリー表示部分をコピペすると便利。
      • ただし、ディレクトリーを示す\にもう一つ\を足してエスケープする必要あり。
setwd("C:\\Users\\Public\\Documents\\sun")

ファイルを読み込む: データフレーム名 <- read.table("ファイル名")

    • 見出し付の場合は、オプションを付ける:データフレーム名 <- read.table("ファイル名", header = T)
    • CSVファイルの場合は read.csv("ファイル名", header = T, sep = ",")
    • オプション stringsAsFactors = Fを付けないとFactor型になってしまうことがあるので注意。

型の確認 mode()

  • Factor型になってしまったものを文字列に変換する関数as.character(例:wordlist)

wordlist <- as.charactor(wordlist)

クリップボードのデータを読み込む

    • Windows:データフレーム名 <- read.table("clipboard")
      • 見出しをつけて読み込むには、header=T オプションをつける
    • MacOS:データフレーム名 <- read.table(pipe("pbpaste"))

  • Rでのデータの形式は、被験者(A, B, C)を縦一列に並べて、その右に各種データを並べていく形が基本
ID Listening Grammar Reading
A 35 49 45
B 39 33 34
C 44 43 42
  • これで、リスニングデータだけを処理対象にしたい場合は、データフレーム名$Listening で、35, 39, 44 という数字が使える。
  • リスニングの平均を出すには: mean(データフレーム名$Listening)
  • 数値のプロット:plot()
    1. > plot(mwu)
    2. > lines(smooth.spline(mwu))
    3. と続けると線が上書きされる

データフレーム <- read.table("clipboard")で読み込んだデータを、ベクトルにする: x <- c(データフレーム)


データをちょっとイジリタイ場合:edit(データ)


データフレームに入っているデータのうち、特定の変数のデータのみを処理対象にしたい場合:

    • データフレーム名$変数名
    • 変数名がついていない場合
      • データフレーム名[,列番号]

いちいち「データフレーム名$」を書くのが面倒な場合、

    • attach(データフレーム名) としておくと、それ以降は、
    • 「データフレーム名$」を書かずに、変数名だけで処理できる。
    • そのデータフレームを使うのをやめて次の作業に移る場合は、
    • detach(データフレーム名) をして解除しておく。

「見出し」をつける

colnames(x) <- c("one", "two") 
names(x) <- c("one", "two") 
  • 見出しの一部だけ変更したい場合:見出しの「要素番号」を指定して上書きする
> names(vacs2)
[1] "verb"         "BCCWJ"        "YNU_J_freq"   "YNU_C_H_freq" "YNU_C_M_freq" "YNU_C_L_freq" "YNU_C_freq"  
> names(vacs2)[2] <- "BCCWJ_freq"
> names(vacs2)
[1] "verb"         "BCCWJ_freq"   "YNU_J_freq"   "YNU_C_H_freq" "YNU_C_M_freq" "YNU_C_L_freq" "YNU_C_freq"  

コンソールからの入力の際のメタキャラクターのエスケープは、バックスラッシュを二重にする \\


正規表現


数の発生

  • ある数(x)から、ある数(y)まで、ある数(z)ずつ増える数字を並べる。
seq(x, y, by = z)
> seq(1, 20, by=1)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
> seq(1, 20, by=2)
 [1]  1  3  5  7  9 11 13 15 17 19
> seq(1, 20, by=3)
[1]  1  4  7 10 13 16 19
> seq(1, 20, by=4)
[1]  1  5  9 13 17

  • ある配列(a)の要素数だけ数字を並べる
seq(1, length(a), by=1)
  • データフレームの行数の場合
seq(1, nrow(a), by=1)

 Macでのこと

  • GUIでファイルを読み込むには
    • × choose.files()
    • file.choose()
  • セパレーターの指定で改行は「\n」だが、
    • × そのまま \n
    • ○ オプションを押して\n
      • 半角の\とバックスラッシュが区別されている!
      • オプションを押しながら\を押してからnを押す
      • ★これは、\nだけでなく、正規表現として\を使う場合は常に。