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

Rの解析に役に立つ記事
スポンサーリンク

ベクトル、マトリックスやデータフレームに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
#&#21336;&#20301;&#12434;&#20184;&#19982;
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
#&#35336;&#31639;&#20363;
print(SetTest_1 + SetTest_2)
Units: [m2]
[1]  7.0014  8.0013  9.0012 10.0011 11.0010 12.0009 13.0008 14.0007
#&#35336;&#31639;&#20363;
print(SetTest_1 * SetTest_2)
Units: [cm2*m2]
[1]  98 104 108 110 110 108 104  98

#&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;;data.frame&#12467;&#12510;&#12531;&#12489;&#12418;&#21516;&#27096;
#&#26032;&#12383;&#12395;Data_3&#12434;&#20316;&#25104;
#tidyverse&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
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 

#&#12505;&#12463;&#12488;&#12523;&#12395;SI&#21336;&#20301;&#12434;&#35079;&#25968;&#20184;&#19982;:mixed_units&#12467;&#12510;&#12531;&#12489;
MixedVec <-&#12288;1:5
Unites <-&#12288;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&#21336;&#20301;&#20197;&#22806;&#12398;&#21336;&#20301;&#12434;&#35373;&#23450;:install_unit&#12467;&#12510;&#12531;&#12489;
#&#20363;&#12360;&#12400;&#20206;&#24819;&#36039;&#29987;&#12398;Bitcoin,Symbol(XYM)&#12392;&#26085;&#26412;&#20870;&#12434;&#36861;&#21152;
#22.02.09_10:00&#38915;&#12398;&#20385;&#26684;
install_unit("BTC")
#def:1XYM&#20385;&#26684;/1BTC&#20385;&#26684;
install_unit("XYM", def = "0.00000419 BTC")
#def:1yen/1xym&#20385;&#26684;
install_unit("yen", def = "0.046210721 XYM")

#&#21033;&#29992;&#12391;&#12365;&#12427;&#21336;&#20301;&#12434;&#22522;&#28310;&#12395;&#22793;&#25563;&#12377;&#12427;:as_units&#12467;&#12510;&#12531;&#12489;
#set_unit&#12467;&#12510;&#12531;&#12489;&#12392;&#32068;&#12415;&#21512;&#12431;&#12379;&#12427;
#&#20363;&#12360;&#12400;1BTC&#12398;yen&#20385;&#26684;
set_units(as_units("BTC"), yen)
5164678 [yen]
#&#20363;&#12360;&#12400;1XYM&#12398;yen&#20385;&#26684;
set_units(as_units("XYM"), yen)
21.64 [yen]
#&#20363;&#12360;&#12400;1m&#12434;cm&#12395;&#22793;&#25563;
set_units(as_units("m"), cm)
100 [cm]

#&#30331;&#37682;&#12375;&#12383;&#21336;&#20301;&#12434;&#28040;&#21435;:remove_unit&#12467;&#12510;&#12531;&#12489;
remove_unit(symbol = c("BTC", "XYM", "yen"))
#&#20363;&#12434;&#23455;&#34892;;&#12456;&#12521;&#12540;&#12395;&#12394;&#12427;
set_units(as_units("BTC"), yen)
#Error: In &lsquo;BTC&rsquo;, &lsquo;BTC&rsquo; 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.

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

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