1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

R言語おぼえがき(逆引き)

Last updated at Posted at 2023-11-25

この記事について

データ分析の学校に通っている中で、R言語でよく使う(けどよく忘れる)処理をメモっておきます。

自分自身の逆引き辞典として使えるように。

R言語おぼえがき

インストール関連

バージョンを指定しないでインストール

install.packages("Library_Name")

バージョンを指定してインストール

remotes::install_version("Library_Name", version = "x.x.x")

パッケージの存在チェックをした上でインストール

if(!require(Library_Name)){install.packages("Library_Name")}

ベクトル

特定の範囲のベクトルを作る

2:5 #2から5までの整数が入ったベクトル

パターン・組み合わせ

1〜5が入った箱が2つあり、1つずつ出したときのパターン

expand.grid(1:5,1:5)

1〜5の中から2つの数字を取り出したときの組み合わせ

t(combn(1:5,3))

データフレーム関連

データフレームを作る - data.frame()

df <- data.frame(列名1=vector1, 列名2=vector2)

データフレーム - 表示

列名の一覧を表示する

colnames(df)

項目の一覧と代表的な値を表示する

glimpse(df)

データフレームのサイズ(行数と列数)を確認する

dim(df)

結果は行数、列数の順に表示される。
10 20 と表示されたら、そのデータは10行20列。

カテゴリカルな値の一覧を表示する

levels(df$column_name)

文字列型の項目の一覧とカウントを表示する

table(df$column_name)

データフレーム - 列の操作

特定の列を取り出す

# iris から 1 列目を取り出す
iris[, 1]

# iris から Sepal.Length を取り出す(どっちのやりかたでもOK)
iris[, "Sepal.Length"]
iris$Sepal.Length

#複数列を名前で取り出したいなら
iris[, c("Sepal.Length", "Petal.Length")]

1列だけ取り出した場合、該当の列の値がすべて入った ベクトル を返す
-> データフレームじゃなくなるよ!

-> データフレームのままにしたい場合は、drop=Fを指定する必要あり
iris[,1,drop=F]

複数列を取り出した場合は、データフレームのまま。

特定の列を除外する

# 1列消す
df$消したい列 <- NULL

# 複数列ある場合
iris[, !(names(iris) %in% c("Species","Sepal.Length"))]

列の追加


# 初期化するなら
df$存在しない列名追加したい列名 <- NA

# 入れたい値が既にあり、それが df と同じ長さのベクトルに入っている場合
df$存在しない列名追加したい列名 <- dfの行数と同じ長さのベクトル

存在する列名にNULLを代入すると列がまるごと消えるので注意

列名の一括変更(正規表現)

# x というデータフレームの列名のスペースをアンスコに変更
colnames(x) <- gsub(" ", "_", colnames(x))

# x というデータフレームの列名のドットを除外
colnames(x) <- gsub("\\.", "", colnames(x))

第一引数は正規表現なので、.などはエスケープする必要あり

merge = ふたつのデータフレームの JOIN

SQLなら確実にJOINで処理するであろうあの操作を、Rでは merge という関数を使って処理します。


merged <- merge(df1, df2, by.x="df1のキーとなる列名", by.y="df2のキーとなる列名"

データフレーム - 行の操作

特定の行を取り出す(インデックス指定)

# iris の 1行目を取り出す
iris[1,]

値が1行分入った データフレーム を返す

特定の行を除外する(インデックス指定)

# iris の 1行目を除外する
iris[-1,]

行を条件でフィルタリング

#df の中に point という列があり、その列の値が80以上のデータをフィルタリングしたい場合
df[df$point > 80,]

#複数条件での抽出
df[df$point < 20 & df$attended == TRUE,]

#Genre列が特定の値の行だけを抽出
df_g <- df[df$Genre %in% c("action","adventure","animation","comedy","drama"), ]

欠損を含む行を抽出

df[!complete.cases(df), ]

欠損を含まない行を抽出

df[complete.cases(df), ]

正規表現で抽出


# 前提:stats というデータフレームの Country.Name 列に国名が入っている

# Ja で始まる行を抽出 -> Jamaica と Japan が出てくる
stats[grep("^Ja",stats$Country.Name),]

# guay で終わる行を抽出 -> Paraguay と Uruguay が出てくる
stats[grep("guay$",stats$Country.Name),]

複数行を名前指定で抽出


# 前提:stats というデータフレームの Country.Name 列に国名が入っている

stats[stats$Country.Name %in% c("Uruguay", "Paraguay"),]

ソートする

# decreasing=TRUE で降順に
iris[order(iris$Sepal.Length,Sepal.Width,decreasing=TRUE),]

行方向に結合 - rbidn

# decreasing=TRUE で降順に
wine <- rbind(wine_red, wine_white)

データフレーム - 集計

# %>% を使うために必要なライブラリ
library(dplyr)

# CountyNameごとのLifeExpの平均を集計し、新たに df_avr に入れる
df_avr <- df %>%
  group_by(CountryName) %>%
  summarize(AvgLifeExp = mean(LifeExp))

データフレーム - 型の操作

ファクター化

全項目をfactorに
df <- df %>%
  mutate_all(as.factor)
特定の項目をfactorに
df <- df %>%
  mutate(
    year = as.factor(year),
    month = as.factor(month)
  )
データフレームの文字列型を factor 型に一括変換
df <- df %>% 
  mutate(across(where(is.character), as.factor))

df は、別名の df に代入しても、同じ df を上書きしてもOK

現在は以上です

新しいことを学んだら、またこちらに書き足していきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?