Rで解析:単位を付与し、そのまま計算が可能「units」パッケージ


ベクトル、マトリックスやデータフレームにSI単位を付与し、そのまま計算が可能なパッケージの紹介です。例えば1に「m」と「cm」の単位を付与し加算した場合は「1.1 m」が得られます。また、自分で単位を設定し使用することもできます。実行コマンドでは仮想資産のBitcoinとSynbol(XYM)、日本円の単位を設定し価格の計算例を記述しています。大変便利なパッケージだと思います。

パッケージのバージョンは0.8-0。実行コマンドはwindows 11のR version 4.1.2で確認しています。

パッケージのインストール

下記コマンドを実行してください。

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

実行コマンド

詳細はコメント、パッケージヘルプを確認してください。

#パッケージの読み込み
library("units")

#ベクトル,マトリックス,データフレームにSI単位を付与:set_unitsコマンド
#理論的であれば単位付きで四則計算が可能
#ベクトル例
print(Test_1 <- c(7:14))
[1]  7  8  9 10 11 12 13 14
print(Test_2 <- c(14:7))
[1] 14 13 12 11 10  9  8  7
#単位を付与
print(SetTest_1 <- set_units(Test_1, m2))
Units: [m2]
[1]  7  8  9 10 11 12 13 14
print(SetTest_2 <- set_units(Test_2, cm2))
Units: [cm2]
[1] 14 13 12 11 10  9  8  7
#計算例
print(SetTest_1 + SetTest_2)
Units: [m2]
[1]  7.0014  8.0013  9.0012 10.0011 11.0010 12.0009 13.0008 14.0007
#計算例
print(SetTest_1 * SetTest_2)
Units: [cm2*m2]
[1]  98 104 108 110 110 108 104  98

#データフレーム;data.frameコマンドも同様
#新たにData_3を作成
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
tibble(Group = paste0("Group", 1:4), 
       Data_1 = set_units(runif(4), s),
       Data_2 = set_units(1:4, m/s)) %>%
  mutate(Data_3 = Data_2*Data_1)
# A tibble: 4 x 4
  Group  Data_1 Data_2 Data_3
  <chr>     [s]  [m/s]    [m]
1 Group1 0.0151      1 0.0151
2 Group2 0.614       2 1.23  
3 Group3 0.777       3 2.33  
4 Group4 0.0840      4 0.336 

#ベクトルにSI単位を複数付与:mixed_unitsコマンド
MixedVec <- 1:5
Unites <- c("m/s", "km/h", "mg/L", "g", "g")
mixed_units(MixedVec, values = Unites)

Mixed units: g (2), km/h (1), m/s (1), mg/L (1) 
1 [m/s], 2 [km/h], 3 [mg/L], 4 [g], 5 [g] 

#SI単位以外の単位を設定:install_unitコマンド
#例えば仮想資産のBitcoin,Symbol(XYM)と日本円を追加
#22.02.09_10:00頃の価格
install_unit("BTC")
#def:1XYM価格/1BTC価格
install_unit("XYM", def = "0.00000419 BTC")
#def:1yen/1xym価格
install_unit("yen", def = "0.046210721 XYM")

#利用できる単位を基準に変換する:as_unitsコマンド
#set_unitコマンドと組み合わせる
#例えば1BTCのyen価格
set_units(as_units("BTC"), yen)
5164678 [yen]
#例えば1XYMのyen価格
set_units(as_units("XYM"), yen)
21.64 [yen]
#例えば1mをcmに変換
set_units(as_units("m"), cm)
100 [cm]

#登録した単位を消去:remove_unitコマンド
remove_unit(symbol = c("BTC", "XYM", "yen"))
#例を実行;エラーになる
set_units(as_units("BTC"), yen)
#Error: In ‘BTC’, ‘BTC’ is not recognized by udunits.

#See a table of valid unit symbols and names with valid_udunits().
#Custom user-defined units can be added with install_unit().

#See a table of valid unit prefixes with valid_udunits_prefixes().
#Prefixes will automatically work with any user-defined unit.

少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

スポンサードリンク