« 2025年6月 | トップページ | 2025年8月 »

2025年7月20日 (日)

[R]小数点以下の切り捨てを行う

trunc関数を使う。引数に与えた数値の小数点以下を、強制的に切り捨てていると考えればよい。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], trunc(d[i])))
0.400000 -> 0.000000
0.500000 -> 0.000000
0.600000 -> 0.000000
1.400000 -> 1.000000
1.500000 -> 1.000000
1.600000 -> 1.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], trunc(d[i])))
-0.400000 -> -0.000000
-0.500000 -> -0.000000
-0.600000 -> -0.000000
-1.400000 -> -1.000000
-1.500000 -> -1.000000
-1.600000 -> -1.000000

似たような機能を持つfloor関数もあるが、こちらは小数点以下を強制的に切り捨てているのではなく、引数に与えた数値を超えない最大の整数を返すことに注意。つまり、負数の場合はtrunc関数とfloor関数では動作が異なる。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], floor(d[i])))
0.400000 -> 0.000000
0.500000 -> 0.000000
0.600000 -> 0.000000
1.400000 -> 1.000000
1.500000 -> 1.000000
1.600000 -> 1.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], floor(d[i])))
-0.400000 -> -1.000000
-0.500000 -> -1.000000
-0.600000 -> -1.000000
-1.400000 -> -2.000000
-1.500000 -> -2.000000
-1.600000 -> -2.000000

2025年7月18日 (金)

[R]小数点以下の四捨五入を行う

round関数を使う。JIS Z 8401に基づくいわゆる偶数丸めであることに注意。

> d <- c(0.4, 0.5, 0.6, 1.4, 1.5, 1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], round(d[i])))
0.400000 -> 0.000000
0.500000 -> 0.000000
0.600000 -> 1.000000
1.400000 -> 1.000000
1.500000 -> 2.000000
1.600000 -> 2.000000
> d <- c(-0.4, -0.5, -0.6, -1.4, -1.5, -1.6)
> for (i in 1:length(d))
+ cat(sprintf("%f -> %f\n", d[i], round(d[i])))
-0.400000 -> -0.000000
-0.500000 -> -0.000000
-0.600000 -> -1.000000
-1.400000 -> -1.000000
-1.500000 -> -2.000000
-1.600000 -> -2.000000

2025年7月17日 (木)

[R]tibbleの列名を得る

names関数を使う。tibbleを与えると、列名を文字型ベクトルで返す。以下はあらかじめ用意したtibbleで列名を取得した例。簡潔な表示にするため、tibbleの中身はデータフレームに変換して表示している。

> tib |> as.data.frame()
name seiyu
1 メレアーデ 石見舞菜香
2 ライスシャワー 石見舞菜香
3 マーシル 石見舞菜香
4 メイショウドトウ 和多田美咲
5 フィー 和多田美咲
6 リフ 瀬戸麻沙美
7 セナディア 鈴木みのり
> names(tib)
[1] "name" "seiyu"

2025年7月14日 (月)

[R]データフレームの列名を得る

names関数を使う。データフレームを与えると、列名を文字型ベクトルで返す。以下はあらかじめ用意したデータフレームで列名を取得した例。

> print(dtf)
name seiyu
1 メレアーデ 石見舞菜香
2 ライスシャワー 石見舞菜香
3 マーシル 石見舞菜香
4 メイショウドトウ 和多田美咲
5 フィー 和多田美咲
6 リフ 瀬戸麻沙美
7 セナディア 鈴木みのり
> names(dtf)
[1] "name" "seiyu"

2025年7月11日 (金)

[R]サンプルのデータセット「面積が1万平方マイルを超える陸塊」

datasetsパッケージのislandsは、面積が1万平方マイルを超える陸塊をまとめたサンプルのデータセット。引用元は以下のとおり。

The World Almanac and Book of Facts, 1975, page 406

> length(islands)
[1] 48
> head(islands)
Africa Antarctica Asia Australia Axel Heiberg
11506 5500 16988 2968 16
Baffin
184
> tail(islands)
Taiwan Tasmania Tierra del Fuego Timor
14 26 19 13
Vancouver Victoria
12 82
> names(islands)
[1] "Africa" "Antarctica" "Asia"
[4] "Australia" "Axel Heiberg" "Baffin"
[7] "Banks" "Borneo" "Britain"
[10] "Celebes" "Celon" "Cuba"
[13] "Devon" "Ellesmere" "Europe"
[16] "Greenland" "Hainan" "Hispaniola"
[19] "Hokkaido" "Honshu" "Iceland"
[22] "Ireland" "Java" "Kyushu"
[25] "Luzon" "Madagascar" "Melville"
[28] "Mindanao" "Moluccas" "New Britain"
[31] "New Guinea" "New Zealand (N)" "New Zealand (S)"
[34] "Newfoundland" "North America" "Novaya Zemlya"
[37] "Prince of Wales" "Sakhalin" "South America"
[40] "Southampton" "Spitsbergen" "Sumatra"
[43] "Taiwan" "Tasmania" "Tierra del Fuego"
[46] "Timor" "Vancouver" "Victoria"

全部で48個納められている。単位は平方マイルであることに注意。これを平方メートルに変換するには、1マイルは約1609mであるので、それぞれ1609^2=2588881、平方キロメールに変換するには1.609^2=2.588881で割ればよい。北海道、本州、九州で試してみる。

> s <- c("Hokkaido", "Honshu", "Kyushu")
> islands[s]
Hokkaido Honshu Kyushu
30 89 14
> islands[s] / 1609 ^ 2
Hokkaido Honshu Kyushu
1.158802e-05 3.437779e-05 5.407742e-06
> islands[s] / 1.609 ^ 2
Hokkaido Honshu Kyushu
11.588018 34.377787 5.407742

ニュージーランドの北島と南島でも試してみる。

> s <- grep("New Zealand", names(islands))
> islands[s]
New Zealand (N) New Zealand (S)
44 58
> islands[s] / 1609 ^ 2
New Zealand (N) New Zealand (S)
1.699576e-05 2.240350e-05
> islands[s] / 1.609 ^ 2
New Zealand (N) New Zealand (S)
16.99576 22.40350

2025年7月 8日 (火)

[R]tibbleから指定の列の値が重複する行を取り除く

distinct関数で列を指定すると、指定された列の重複を調べて、重複を取り除いたその列の値のだけを返す。.keep_allオプションにTRUEを指定すると、指定の列だけではなくすべての列の値を返す。返される列の値は行番号の数値が一番小さい行の値であり、任意の行を指定することはできない。tibbleの順番を逆にすると、行番号の数値が一番多い行の値を返すようになる。

> is_tibble(chara)
[1] TRUE
> chara |> as.data.frame()
name seiyu
1 セナディア 鈴木みのり
2 フィー 和多田美咲
3 マーシル 石見舞菜香
4 メイショウドトウ 和多田美咲
5 メレアーデ 石見舞菜香
6 ライスシャワー 石見舞菜香
7 リフ 瀬戸麻沙美
> chara |> distinct(seiyu) |> as.data.frame()
seiyu
1 鈴木みのり
2 和多田美咲
3 石見舞菜香
4 瀬戸麻沙美
> chara |> distinct(seiyu, .keep_all = TRUE) |> as.data.frame()
name seiyu
1 セナディア 鈴木みのり
2 フィー 和多田美咲
3 マーシル 石見舞菜香
4 リフ 瀬戸麻沙美
> chara[nrow(chara):1, ] |> distinct(seiyu, .keep_all = TRUE) |> as.data.frame()
name seiyu
1 リフ 瀬戸麻沙美
2 ライスシャワー 石見舞菜香
3 メイショウドトウ 和多田美咲
4 セナディア 鈴木みのり

2025年7月 7日 (月)

[R]tibbleの行を逆順に並び替える

nrow関数でそのtibbleの全行数を取得し、行のインデックスに全行数~1となる数値ベクトルを指定すればよい。以下は、あらかじめ用意したtibbleであるcharaで行を逆順に並び替えた例。簡潔な表示にするため、画面出力時にデータフレームに変換している。

> is_tibble(chara)
[1] TRUE
> chara |> as.data.frame()
name seiyu
1 セナディア 鈴木みのり
2 フィー 和多田美咲
3 マーシル 石見舞菜香
4 メイショウドトウ 和多田美咲
5 メレアーデ 石見舞菜香
6 ライスシャワー 石見舞菜香
7 リフ 瀬戸麻沙美
> chara[nrow(chara):1, ] |> as.data.frame()
name seiyu
1 リフ 瀬戸麻沙美
2 ライスシャワー 石見舞菜香
3 メレアーデ 石見舞菜香
4 メイショウドトウ 和多田美咲
5 マーシル 石見舞菜香
6 フィー 和多田美咲
7 セナディア 鈴木みのり

« 2025年6月 | トップページ | 2025年8月 »

無料ブログはココログ

■■

■■■