R

回遊データをラインポリゴン化する方法

GIS R

# 回遊データをラインポリゴン化 kaiyuu_line_polygons <- postings_with_kaiyuu_id %>% sf::st_as_sf( coords = c('longitude', 'latitude') ) %>% group_by( # group_by + summariseをすると個々の投稿座標がMULTIPOINTでまとまる kaiyuu_id ) %>% summari…

共通の属性をもつポイントデータ同士を1つのラインポリゴンに統合する方法

GIS R

postings_with_kaiyuu_id %>% sf::st_as_sf( coords = c('longitude', 'latitude') ) %>% group_by( # group_by + summariseをすると個々の投稿座標がMULTIPOINTでまとまる kaiyuu_id ) %>% summarise( dummy = n(), do_union = F # 元のデータの順番でMULTI…

ggplotでy軸名を折り返したいとき

テストデータ df <- tibble( label_grp = c("short", "Medium label", "a very long axis label that needs to be folded"), some_value = c(13633,20824,42000) ) まずは普通にggplot このままだと折り返してくれない ggplot(data = df) + geom_col(aes(y =…

日本地図をさくっと用意してggplotしたいとき

# 日本地図 japan <- sf::st_read( 'https://oku.edu.mie-u.ac.jp/~okumura/stat/data/japan.geojson', stringsAsFactors = F )

japanmeshでメッシュコードから緯度経度を出す

GIS R

japanmesh でメッシュコードから緯度経度をだしたい その作業を tibble でやりたいとき data %>% mutate( latitude = map_dbl( .x = mesh_code, .f = ~ {jpgrid::grid_to_coords(jpgrid::grid_auto(.x))[[2]]} ), longitude = map_dbl( .x = mesh_code, .f =…

地理空間データのwkt形式について

地理空間データの形式として .shp 形式をよく利用してた .shp はどうも重い? wkt はオブジェクトとそのオブジェクトの頂点座標の集合を1つのデータセットとしてもつ形式 ファイルの形式そのものは .csv になる あとでちゃんと調べよう

mcmcを使ってベイズ推定を自作でやってみる

ベイズ推定はライブラリやstanを使えばお手軽に実行可能 お手軽すぎて中身が本当に理解できているか不安 なので自作してみた まずは準備 # 神ライブラリ pacman::p_load(tidyverse) # データの格納先 mu <- NULL lp <- NULL # パラメタ更新のステップサイズ …

googledriveパッケージについて

以下の3つの関数でこと足りる気がするのでまとめておく drive_find について ディレクトリやファイルの検索関数 検索対象の 名前 と ID を取得可能 検索範囲を拡張子やタイプで type で指定可能 document : Google Docs presentation : Google Slides spread…

交絡のコントロールについて

因果推論したいとき、交絡をいかにコントロールするかは大切 交絡のコントロールの方法はたくさんある 層別分析 多変量解析(重回帰分析など) 傾向スコア(マッチング、逆確率重みづけ、など) などなど 交絡が生じているときにコントロールしないとどうな…

pmapの特殊な仕様について

purrr::map2 でベースを作ったあと、引数をさらに増やしたいときがある map2 で扱える引数は2つまでなので、引数を増やすには purrr::pmap を使う pmap は 引数の指定はやや特殊 map2 のように .x .y …ではなく、pmap では ..1 ..2 ..3 …としなくてはならな…

列名を綺麗にしたいとき

janitor::clean_names という関数がとても便利。 列名はすべて小文字に変更 列名はすべてスネークケースに変更 列名に含まれる空白は _ に置換 列名に含まれる邪魔な文字は削除(例:ウムラウト、 @ 、 () など) 列名に含まれる % は percent に変更 列名が…

ggplotで文字列をaesに引き渡したいとき

ggplotは aes の中がNSEになっている。なので、 ggplot(data = iris) + geom_histogram(aes(x = Sepal.Length)) これは動くけど、 ggplot(data = iris) + geom_histogram(aes(x = 'Sepal.Length')) これは動かない。文字列を aes に引き渡したいときは、 aes…

NSE処理で変数列名を柔軟に変更

R NSE

データフレーム と 使用する変数 と 新しく合成する変数列名 を引数にもつ関数を作ったとする。 f <- function(data, var, new_var) { # NSE処理 var <- rlang::enquo(var) new_var <- rlang::enquo(new_var) # varを2倍した新しい変数 `new_var` を作る .d …

ggplotでNSE処理

ggplotで変数を柔軟に変更できるような自作関数を作りたくなったら、やはりNSE処理が必要になる。例えば、あるデータフレームを使用して、そのデータフレーム中の2つの変数を指定し、散布図を描きたいとしよう。 ggplot(data = iris) + geom_point(aes(x = S…

patchworkについて

group_nest して map で ggplot を作ったあと、そのfigsをまとめて1つのfigにしたいときがある。 そういうときに patchwork::wrap_plots が便利。 例えばこんなコード。 pacman::p_load(tidyverse) d_plot <- iris %>% group_nest(Species) %>% mutate( figu…

NSE処理について

R NSE

引数に データフレーム と データフレーム中の変数 を指定可能な自作関数を作りたいときがある。 例えば、 iris %>% select(Sepal.Length) という超簡単な処理を Sepal.Length 以外の変数でも使えるように、この処理を関数化してみよう。直感的にはこんな風…

blogdownについて

Rmarkdownでブログ書きたい Rstudioで色々慣れてしまったので、技術ブログの管理もRstudioでやりたい。もっというと、 Rmarkdown で書きたい。blogdown はそういうコンセプトのライブラリらしい。 こんな感じでやればええんとちゃうか。 git hubでリモートリ…

バージョン管理について(pins・renv)

バージョン管理って大切なんですね。チームで動くときは特に。 バージョン管理したいのは、パっと思いつくものだと、 - Rそのもの - ライブラリ - スクリプト - 元データ これらのバージョンを管理しておけば、 - 過去のある時点の結果を再現 - 引継ぎの後任…

Performanceについて

Assessment of Regression Models Performance • performance glmやglmerのR2、多重共線性、正規性、過分散、ゼロ過剰を確認する (easystats) - Qiita

Apache Arrowについて

【R】Apache Arrowとduckdbを試してみる - Qiita Apache Spark 3.0でサポートされるRのI/Oのベクトル化 - Qiita Apache Arrowの現状確認(2018年7月) - Technically, technophobic.

行方向で集計したいとき

R

行方向で集計したいとき、例えば総和を求めたいとき、いつもrowwiseとかc_acrossとかの書き方を忘れる。イライラ! `mutate(rowMeans())` や `mutate(rowSums())` で十分 dplyr.tidyverse.org

特定の文字の前後で分割したいとき

str_split_fixed(data$分割したい列, '分割の目印となる文字列', n = 分割後の列数)

欠損値の削除方法について

NAをすべて置き換えたいとき data[is.na(data)] <- 置き換えたいもの

回帰診断について

線形回帰モデルを組んだ時はちゃんと回帰診断して、誤差に関する複数の仮定が妥当かをチェックせなあかんで、という話。 www.goodnalife.com http://www.aoni.waseda.jp/abek/document/regression-3.html www.qualtrics.com

接触するポリゴンを1つのポリゴンとしてまとめるとき

R GIS

gisをしていると、接触するポリゴンを1つのポリゴンとしてまとめたいときがある。sfパッケージでできるのだが、どうも思ったようにはいまのところ動かないときがある。 例えば、geom_sfで可視化したときに、接触していないようなポリゴンが接触したと判定さ…

japanmeshでメッシュポリゴンをsf形式に変換

R GIS

japanmeshはjpmeshより何かと処理速度が速くて助かる。mesh_codeさえわかれば、それをポリゴンにしてsf形式のtibbleにすることもできる。こんな感じ。 japanmeshがなくなってjpgridになったver (data with meshcode) %>% mutate( geometry = map( .x = mesh_…

tidymodelsのprep, juice, bakeの必要性

R

tidymodelsでなんでわざわざprepとかjuiceとかbakeせなあかんのよくわからんかった。同じ疑問を持つ人もいるようだ。 https://community.rstudio.com/t/are-prep-bake-and-juice-needed-to-train-evaluate-a-model/84916 workflowつかうなら別にいらんくね?…

glmnetで説明変数の上限を超えたとき

glmnetでは説明変数の個数に上限があるらしい。300個以上の説明変数をつかったモデルを組んだら、こんなエラーがでた。 Error: protect(): protection stack overflow同じことについて質問している人がいた。 https://stackoverflow.com/questions/32826906/…

future_mapでメモリが足りませんと言われたら

future_mapをつかったら、こんなエラー文がでた。 Error in getGlobalsAndPackages(expr, envir = envir, persistent = persistent, : The total size of all global objects that need to be exported for the future expression (‘head(a)’) is XXX MiB. T…

ENMevalでhingeを設定するとバグるときがある

なぜかhingeをfeatureに指定すると時々バグる https://groups.google.com/g/Maxent/c/PE_MCCqxEV4 https://github.com/jamiemkass/ENMeval/issues/57