R関連メモ – 20221017時点

データ型/データ構造

以下のサイトを参考にさせて頂いています。

http://www.f.waseda.jp/sakas/R/Rdata.html

データ型

データの型説明定数の例
integer(numeric) 整数型 1, -1, 20300, ...
double(numeric) 実数型(整数も含む) 3.1415, -0.001, 125.00012, 1, 1e-10, ...
 complex 複素数型 1i, 1 - 4.5i, 3+0i, complex(re=a,im=b), ...
 character 文字型 "A", "2014/10/14", "", ...
 logical 論理型 TRUE, FALSE, T, F, NA, ...
http://www.f.waseda.jp/sakas/R/Rdata.html

データ構造

vector

matrix

array

list

data.frame

factor

iris

演算子(Operator)

この項目の表は以下から抜粋しています。

Data Analysis with R Programming
Learn R programming with Google’s Data Analysis with R Programming course on Coursera. Explore RStudio, R packages, dataframes, visualizations, and R Markdown. ...

算術演算子(arithmetic operators)

OperatorDescriptionExample CodeResult/ Output
+Additionx + y[1] 7
Subtraction x – y[1] -3
*Multiplicationx * y[1] 10
/Divisionx / y[1] 0.4
%%Modulus (returns the remainder after division)y %% x[1] 1
%/%Integer division (returns an integer value after division) y%/% x[1] 2
^Exponent y ^ x[1]25
x <- 2, y<-5 の時。

関係演算子(Relational operators)

Operator DescriptionExample CodeResult/Output
<Less thanx < y[1] TRUE
>Greater thanx > y[1] FALSE
<=Less than or equal tox < = 2[1] TRUE
>=Greater than or equal toy >= 10[1] FALSE
==Equal to y == 5[1] TRUE
!=Not equal to x != 2[1] FALSE
x <- 2, y<-5 の時。

論理演算子(Logical operators)

Operator Descriptioncomment
&Element-wise logical ANDvectorの時は、vector内の要素全てを対象とする。(EX.) x <- c(3,5,7), y <-x(2,4,6)の時、x < 5 & y <5の結果は、TRUE FALSE FALSE
&&Logical ANDvectorの時は、vector内の初めの値のみを対象とする。(EX.) x <- c(3,5,7), y <-x(2,4,6)の時、x < 5 & y <5の結果は、TRUE
|Element-wise logical OR同上
||Logical OR 同上
!Logical NOT

代入演算子(Assignment operators)

Operator DescriptionExample Code (after the sample code below, typing x will generate the output in the next column)Result/ Output
<-Leftwards assignment x <- 2[1] 2
<<-Leftwards assignmentx <<- 7[1] 7
=Leftwards assignmentx = 9[1] 9
->Rightwards assignment 11 -> x[1] 11
->>Rightwards assignment21 ->> x[1] 21
<<- はグローバル変数(難しい)としてassignするためのものだそうですが、初学者が基本的に使うことはない。そうです。

base

Rにデフォルトで含まれているパッケージ

コンフィグ関係

言語変更

Sys.setenv(LANG = “en”)

関数(function)の説明

browseVignettes(“function名”)

パッケージインストール

install.packages(“package名”)

インストール済みのパッケージ一覧表示

installed.packages()

パッケージの有効化

library(“package名”)

作業フォルダ(current directory(cd))の移動

setwd(“移動先のファイルリンク(現在の作業場所は含まない)”)

EX.) 現在、Project/にて作業→Project/Course 7/Week 3に移動。

setwd(“Course 7/Week 3”)

基本的な計算

最大値、最小値

最大値: MAX(表名$列名)

最小値: MIN(表名$列名)

表関連

表の表示 (console内ではなく、別タブとして)

View(“表名”)

表の詳細を文字形式で表示(各列のデータタイプ、データ数、データ一覧)

str(“表名”)

表の名前の一覧を表示

colnames(“表名”)

統計関連

ランダムな値の抽出

sample()

# 1から5の数列、my_vecから3つの数値をランダムで抽出

[INPUT]
my_vec <- 1:5
sample(my_vec, size = 3)

[OUTPUT]
[1] 2 3 5

tidyverse

Rで表形式のデータ処理・解析をするためのパッケージ

正確にはtidyverseは以下のパッケージをまとめたパッケージ集。

ggplot2: グラフ描画パッケージ

dplyr: データ操作パッケージ

tidyr: tidy dataを作るためのパッケージ

readr: データファイル読み込みパッケージ

purrr: 繰り返し計算を行うためのツール

tibble: tidyverseの世界で使うデータ形式。データフレームの一種

stringr: 文字列操作ライブラリ

forcats: ファクタ(因子)操作ライブラリ

http://bcl.sci.yamaguchi-u.ac.jp/~jun/notebook/r/tidyverse/

dplyr

特定の条件を満たす行の抽出 (SQLのwhereと同じ)

filter(“対象の表”, “列名と条件(ex. dose == 0.5)”)

表の並び順入れ替え (SQLのorder byと同じ)

arrange(表名, 並びの基準とする列名) #small -> large = Ascending

arrange(表名, -並びの基準とする列名) #large -> small = Descending

指定した列のみの抽出 (SQLのselectと同じ)

select(“表名”, “列名1”, “列名2”, “列名3”, …)

EX.1) select(bookings_df, adr, adults) #adr, adults列のみを抽出

EX.2) select(bookings_df, -adults) #adults列以外のすべての列を抽出。

列の追加

mutate(“表名”, “新表名と条件( ex. carat_2=carat*100)”)

表の先頭6列のみ表示

head(“表名”)

列名の変更

rename(新column名 = 旧column名)

列名のupper/lower caseの変更

rename_with(“表名”, “tolower”) #全てのcolumn名をlower caseに

rename_with(“表名”, “toupper”) #全てのcolumn名をupper caseに

rename_with(“表名”, “toupper”, start_with(“文字”)) #column名が特定の文字から始まる全てのcolumn名をupper caseに

指定した列の要素ごと(distinct)の値を集計する (SQLのgroup byと同じ)

表名 %>% group_by(列名) %>% summarise(アクション)

# penguinsテーブルのisland列の各要素に対して、NA値を省いた、bill_length_mmの平均値を求める。求めた値をmean_bill_length_mm列として出力する

[INPUT]
penguins %>% group_by(island) %>% 
  drop_na() %>% 
  summarize(mean_bill_length_mm = mean(bill_length_mm))

[OUTPUT]
  island    mean_bill_length_mm
  <fct>                   <dbl>
1 Biscoe                   45.2
2 Dream                    44.2
3 Torgersen                39.0

group_by対象の列は,で区切って複数選択可能。summarizeのアクションも同様に複数実行可能。

列の結合

表名 %>%

select(“既存の列1”, “既存の列2”, …) %>%

unite(新しい列名, c(“既存の列1”, “既存の列2”, …), sep = “結合データの間に入れる文字や記号”)

#bookings_dfのarrival_date_year列と、arrival_date_month列を組み合わせて、arrival_month_year列を作成する。結合の際、間に半角スペースを入れる。

[INPUT]
bookings_df %>%
 select(arrival_date_year, arrival_date_month) %>%
 unite(arrival_month_year, c("arrival_date_month", "arrival_date_year"), sep = " ")

[OUTPUT]
arrival_month_year
   <chr>             
 1 July 2015          
 2 July 2015          
 3 July 2015          
 4 July 2015          
 5 July 2015          
 6 July 2015          
 7 July 2015          
 8 July 2015          
 9 July 2015          
10 July 2015     

列の分離

separate(表名, 分離する列名, into = c(‘分離後の列1’, ‘分離後の列2’), sep = “分離する条件”)

#employeeテーブルのname列を、半角スペースを目印に、first_name列とlast_name列に分ける。

[INPUT]
separate(employee, name, into = c('first_name', 'last_name'), sep = " ")

[OUTPUT]
   first_name  last_name
1        John     Mendes
2         Rob    Stewart
3      Rachel Abrahamson
4     Christy    Hickman
5     Johnson     Harper
6     Candace     Miller
7     Carlson      Landy
8       Pansy     Jordan
9      Darius      Berry
10    Claudia     Garcia

ggplot

data.frame型のデータの図を作成するパッケージ。cheetsheet

グラフを書くdata.frameの指定、グラフのX軸、Y軸の設定

ggplot(表名, aes(グラフの設定))

# penguins表から、X軸=flipper_length_mm、 y軸=body_mass_gの枠を作成
# data = , mapping = という記述は省くケースもある

[INPUT]
ggplot(data = penguins, mapping = aes(x = flipper_length_mm, y = body_mass_g))

[OUTPUT]

グラフのタイプを選ぶ

geom_グラフタイプ() #例えばgeom_point()であれば分散図を生成する。

グラフタイプの一覧は以下を参照:

Function reference
# penguins表から、X軸=flipper_length_mm、 y軸=body_mass_gの分散図を作成
# data = , mapping = という記述は省くケースもある

[INPUT(pattern 1)]
ggplot(data = penguins, mapping = aes(x = flipper_length_mm, y = body_mass_g)) + geom_point()

[INPUT(pattern 2)]
ggplot(data = penguins) + geom_point(mapping = aes(x = flipper_length_mm, y = body_mass_g))

[OUTPUT]
グラフの色、大きさ、形などを編集する

要素別に反映:ggplot(表名, mapping = aes(x軸指定, y軸指定, 様々なグラフィック))

表全てに反映:ggplot(表名, mapping = aes(x軸指定, y軸指定)) + geom_グラフタイプ(様々なグラフィック)

  • color
  • size
  • alpha: 色の濃淡をつける
  • linetype
  • fill: geom_barなどで要素ごとに色分け
# scatterplot
ggplot(data = linelist,   # set data
       mapping = aes(     # map aesthetics to column values
         x = age,           # map x-axis to age            
         y = wt_kg,         # map y-axis to weight
         color = age,       # map color to age
         size = age))+      # map size to age
  geom_point(             # display data as points
    shape = "diamond",      # points display as diamonds
    alpha = 0.3)            # point transparency at 30%
404 - Page Not Found
グラフを要素ごとに分割する

単独要素: facet_wrap(~要素名)

複数要素: facet_grid(要素名1~要素名2)

# penguins表から、X軸=flipper_length_mm、 y軸=body_mass_gの枠を作成 
# INPUT1 → species毎にグラフを分割
# INPUT2 → sex x species毎にグラフを分割

[Original dataframe]
   species sex    flipper_length_mm body_mass_g
   <fct>   <fct>              <int>       <int>
 1 Adelie  male                 181        3750
 2 Adelie  female               186        3800
 3 Adelie  female               195        3250
 4 Adelie  NA                    NA          NA
 5 Adelie  female               193        3450
 6 Adelie  male                 190        3650
 7 Adelie  female               181        3625
 .    ...     ...               ...         ...
 .    ...     ...               ...         ...

[INPUT1] facet_wrap
ggplot(data = penguins, mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species))+
  geom_point() +
  facet_wrap(~species)

[OUTPUT1]


[INPUT2] facet_grid
ggplot(data = penguins, mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species))+
  geom_point() +
  facet_grid(sex~species)

[OUTPUT2]

グラフの見た目(theme)を変える

theme(変更する対象 = element_変更項目(変更の内容)

[変更前]
ggplot(data = hotel_bookings) +
  geom_bar(mapping = aes(x = distribution_channel)) +
  facet_wrap(~deposit_type)


[変更後]
ggplot(data = hotel_bookings) +
  geom_bar(mapping = aes(x = distribution_channel)) +
  facet_wrap(~deposit_type) +
  theme(axis.text.x = element_text(angle = 45))

タイトル、サブタイトル、注釈などを足す。

labs(編集内容)

# タイトルの追加
ggplot(.....) +
  geom_xxxx(.....) +
  labs(title="タイトル名")

# サブタイトルの追加
ggplot(.....) +
  geom_xxxx(.....) +
  labs(subtitle="Subタイトル名")

# 注釈の追加
ggplot(.....) +
  geom_xxxx(.....) +
  labs(caption="注釈")
グラフ内にコメントを付け足す

annotate(編集内容)

readr

エクセルの特定のシートを呼び出す

read_excel(“ファイル名”, sheet = “シート名”)

例) read_excel(readxl_example(“type-me.xlsx”), sheet = “numeric_coercion”)

tidyr

表の縦横の入れ替え

基本: pivot_longer(表名, 対象の列A, names_to = ‘列Aの列名を示す新列名’, values_to = ‘列Aの内容を示す列名’

複数列組み合わせ: pivot_longer(表名, 対象の列A:対象の列B, names_to = ‘列A&列Bの列名を示す新列名’, values_to = ‘列A&列Bの内容を示す列名’)

# table表の、first_name列, last_name列を縦長に並び替えて、name_category列, names列と名前を付ける。

[table表の内容]
  id first_name last_name age
1  1        Ryu    Tanaka  29
2  2       Yuko    Tanaka  31
3  3          A    Street  55
4  4          B       Cat  91
5  5          C     Dance  10

[INPUT]
table_v2 <- pivot_longer(table, first_name, names_to = 'name_category', values_to = 'names')
select(table_v2, id, name_category, names, age)

[OUTPUT]
      id name_category names    age
   <int> <chr>         <chr>  <dbl>
 1     1 first_name    Ryu       29
 2     1 last_name     Tanaka    29
 3     2 first_name    Yuko      31
 4     2 last_name     Tanaka    31
 5     3 first_name    A         55
 6     3 last_name     Street    55
 7     4 first_name    B         91
 8     4 last_name     Cat       91
 9     5 first_name    C         10
10     5 last_name     Dance     10

データクリーニング関連

here

skimr

表の統計的情報を含む詳細を表示する(col/row num, data type, missing value, mean, sd, etc.)

skim(“表名”)

janitor

列名にあるスペースの処理(アンダースコアにしたり、スペースを無くしたり)

clean_names(表名, “スペースの処理方法”)

スペースの処理方法:

  • "snake" produces snake_case
  • "lower_camel" or "small_camel" produces lowerCamel
  • "upper_camel" or "big_camel" produces UpperCamel
  • "screaming_snake" or "all_caps" produces ALL_CAPS
  • "lower_upper" produces lowerUPPER
  • "upper_lower" produces UPPERlower
  • old_janitor: legacy compatibility option to pre
clean_names function - RDocumentation
Resulting names are unique and consist only of the _ character, numbers, and letters. Capitalization preferences can be specified using the case parameter. Acce...

モンテカルロ・シミュレーションの環境構築や計算

SimDesign

self memo(QA)

dyplrとggplotを一つのコードchunkで同時に使えますか?

使えます。以下サンプルコード。

#https://rladiessydney.org/courses/ryouwithme/03-vizwhiz-1/#1-4-putting-it-all-together-dplyr-ggplot

data %>%
    filter(variable1 == "DS") %>%  
    ggplot(aes(x = weight, y = variable2, colour = variable1)) +  
    geom_point(alpha = 0.3,  position = position_jitter()) + stat_smooth(method = "lm")

コメント

タイトルとURLをコピーしました