R 乱数

set.seed()は乱数種を指定する関数で、常に同じ乱数を発生させられる。

> rnorm(5)
[1] -1.1589164  0.6717548 -0.5479705 -0.3373437  0.1150608
> rnorm(5)
[1] -0.7928601  0.4900138  0.2429032  0.1189651 -0.1188704

> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
> set.seed(1);rnorm(5)
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
R toJSON関数

toJSON関数(jsonlite)の挙動

# ubox()なし
x <- list(aaa = "あああ", bbb = "いいい") %>% toJASON
cat(x)
{"aaa":["あああ"],"bbb":["いいい"]}
# ubox()あり
x <- list(aaa = unbox("あああ"), bbb = unbox("いいい")) %>% toJASON
cat(x)
{"aaa":"あああ","bbb":"いいい"}
R 小数点の切り捨て・上げ

小数点の切り捨て・上げに関するコマンド

#roundコマンド
#digitsオプションで指定した桁で四捨五入
round(11.12345, digits = 4)
[1] 11.1235
 
#ceilingコマンド
#指定した値(整数部分)未満にならない最小の整数
ceiling(11.000001)
[1] 12
 
#floorコマンド
#指定した値(整数部分)を超えない最大の整数
floor(11.000001)
[1] 11
 
#truncコマンド
#小数点部分を切り捨て
trunc(11.11111)
[1] 11
 
#formatコマンド
#桁数を指定:nsmallオプション
format(11.000001, nsmall = 3)
[1] "11.000"
 
#おまけ
#string::str_padコマンドを使用する
#頭に0を追加して揃える:padオプションで頭に追加する内容を指定する
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
11 %>% str_pad(4, pad = 0)
[1] "0011"
 
#少数点以下に0を追加
#例では小数点以下を4桁にする
#切上げにならない場合があるので注意
sprintf(11.10005, fmt = '%#.4f')
[1] "11.1000"
R 「Nested Data」の操作

「Nested Data」の操作を「unnest」せずに簡単にできるパッケージ

#パッケージのインストール
install.packages("nplyr")

#パッケージの読み込み
library("nplyr")
 
###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 30
TestData <- tibble(Group = sample(paste0("Group_",
                                         formatC(1:4, width = 2, flag = "0")),
                                  n, replace = TRUE),
                   Chr_Data = sample(c("や", "ま", "ぐ", "ち",
                                       "す", "み", "よ", "い"),
                                     n, replace = TRUE),
                   X_num_Data = sample(c(1:50), n, replace = TRUE),
                   Y_num_Data = sample(c(51:100), n, replace = TRUE)) %>%
  group_by(Group) %>%
  nest(NestData = -Group) %>%
  ungroup() %>%
  arrange(Group)
########
 
#並び替え:nest_arrangeコマンド
#降順:dplyr::descコマンドと組み合わせる
TestData %>%
  nest_arrange(NestData, Chr_Data, desc(X_num_Data)) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 や               32         87
#2 Group_01 ま             26         52
#3 Group_01 ぐ             17         98
#4 Group_01 ち             26         58
#5 Group_02 す             41         67
#6 Group_02 み             22         56
 
 
#カウント:nest_countコマンド
TestData %>%
  nest_count(NestData, Chr_Data) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 3
#  Group    Chr_Data     n
#  <chr>    <chr>    <int>
#1 Group_01 や           3
#2 Group_01 ま         1
#3 Group_02 ぐ         2
#4 Group_02 ち         3
#5 Group_02 す         1
#6 Group_02 み         4
 
 
#mutateを適応:nest_mutateコマンド
TestData %>%
  nest_mutate(NestData,
              X_num_Data = X_num_Data / 10,
              Y_num_Data = Y_num_Data * 0.1) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <dbl>      <dbl>
#1 Group_01 や              3.2        8.7
#2 Group_01 ま            2.6        5.8
#3 Group_01 ぐ            1.7        9.8
#4 Group_01 ち            2.6        5.2
#5 Group_02 す            4.9        8.2
#6 Group_02 み            2.9        5.6
 
 
#列の移動:nest_relocateコマンド
TestData %>%
  nest_relocate(NestData, X_num_Data, .after = Y_num_Data) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data Y_num_Data X_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 *               87         32
#2 Group_01 *               58         26
#3 Group_01 *               98         17
#4 Group_01 *               52         26
#5 Group_02 *               82         49
#6 Group_02 *               56         29
 
 
#列名の変更:nest_renameコマンド
#nest_rename_withコマンドもあります
TestData %>%
  nest_rename(NestData, 'KARADA-GOOD' = X_num_Data) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data `KARADA-GOOD` Y_num_Data
#  <chr>    <chr>            <int>      <int>
#1 Group_01 *                  32         87
#2 Group_01 *                  26         58
#3 Group_01 *                  17         98
#4 Group_01 *                  26         52
#5 Group_02 *                  49         82
#6 Group_02 *                  29         56
 
 
#列の選択:nest_selectコマンド
TestData %>%
  nest_select(NestData, X_num_Data) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 2
#  Group    X_num_Data
#  <chr>         <int>
#1 Group_01         32
#2 Group_01         26
#3 Group_01         17
#4 Group_01         26
#5 Group_02         49
#6 Group_02         29
 
 
#summariseを適応:nest_summariseコマンド
TestData %>%
  nest_summarise(NestData, 
                 n = n(),
                 Median_X_num_Data = median(X_num_Data),
                 Mean_Y_num_Data = median(Y_num_Data)) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 4 x 4
#   Group        n Median_X_num_Data Mean_Y_num_Data
#   <chr>    <int>             <dbl>           <dbl>
#1 Group_01     4                26            72.5
#2 Group_02    11                29            69  
#3 Group_03     3                 8            62  
#4 Group_04    12                24            68.5
 
 
#sliceを適応:nest_sliceコマンド
TestData %>%
  nest_slice(NestData, 2, 8, 9) %>%
  #tidyr::unnestコマンドで展開し内容を確認:通常いらない
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 *               26         58
#2 Group_02 *               29         56
#3 Group_02 *               22         56
#4 Group_02 *               22         71
#5 Group_03 *               22         59
#6 Group_04 *                6         57
R プロットや画像の複数表示

プロットや画像の複数表示に便利です「multipanelfigure」パッケージ

#パッケージのインストール
install.packages("multipanelfigure")

#パッケージの読み込み
library("multipanelfigure")
 
###データ例の作成#####
n <- 500
TestData <- data.frame("Group" = sample(paste0("Group", 1:3), n, replace = TRUE),
                          "Data" = rnorm(n))
########
 
###プロット例の作成#####
library("ggplot2")
BoxPlot <- function(i = rainbow(16)[sample(1:16, 1)])
{
  ggplot(TestData, aes(x = Group, y = Data)) +
    geom_boxplot(fill = i)
}
########
 
#プロット区分を設定:multi_panel_figureコマンド
#各プロット区分の幅:widthオプション
#各プロット区分の高さ:heightオプション
#区分の列数:columnsオプション
#区分の行数:rowsオプション
PlotArea <- multi_panel_figure(width = 150, height = 150,
                                  columns = 3, rows = 3)
#確認
PlotArea
 
#区分へプロット:fill_panelコマンド
#プロット区分変数とfill_panelコマンドを%<>%で繋ぐのがポイント
for(i in 1:9){
   
  PlotArea %<>% fill_panel(panel = BoxPlot())
   
}
#確認
PlotArea
 
###例えばこんな使い方1#####
#プロット区分を設定
PlotArea <- multi_panel_figure(width = 150, height = 150,
                                  columns = 3, rows = 3)
#プロット区分を指定してプロット
#プロット1
PlotArea %<>% fill_panel(panel = BoxPlot(), column = 1:2, row = 1:2)
#プロット2
PlotArea %<>% fill_panel(panel = BoxPlot(), column = 3, row = 1:2)
#プロット3-5
PlotArea %<>% fill_panel(panel = BoxPlot(), column = 1, row = 3)
PlotArea %<>% fill_panel(panel = BoxPlot(), column = 2, row = 3)
PlotArea %<>% fill_panel(panel = BoxPlot(), column = 3, row = 3)
#確認
PlotArea
########