【ネタバレなし】アルジャーノンに花束を(おすすめ小説・あらすじと感想)

こんてんつ

小説アルジャーノンに花束を紹介します。

あらすじ

物語の主人公は、知的障害を抱える32歳のチャーリイ・ゴードン。IQにすると6歳児並の大人でした。

そんな彼は「賢くなりたい」という欲求を持ち続け、ある日、画期的な脳手術を受ける機会が訪れます。

彼は、すでに同じ手術で驚くべき成果を出しているハツカネズミのアルジャーノンと、ライバルとして知的作業の勝負を繰り返し行います。

脳手術の効果は抜群であり、チャーリイのIQは指数関数的に上がっていきます。彼の人生は劇的に変わり始めるのです。

知性を持つことは、幸せになることと本当にイコールなのでしょうか? これは、私たちが読み進める中で向き合うことになる、深く、重い問いです。

おすすめポイント

是非、サンプルから最初の数ページを読んでほしい。この本は、チャーリイが書く手術の経過報告の日記形式で進みます。

最初は、誤字やひらがなだらけの文章。すると、知性が向上するにつれ文章が劇的に変化していきます。

この文章の変化を体験できること自体が、この本のユニークさであり、同時に恐ろしさも感じられる魅力の一つです。

感想

知性が高まると、同時にこれまで見えてこなかった「残酷な真実」が見え始めます。

賢くなればなるほど、彼は周りから理解されなくなり、深い孤独に苛まれていきます。

この物語は、単に「知性が増す」話ではなく、「孤独とは何か」「愛とは何か」を深く問いかけてきます。

統計学習者に向けたオススメ書籍

こんてんつ

こちらのページでは統計初学者に向けたオススメ参考書を紹介しています。

書籍紹介

オススメ書籍1:統計学入門 (基礎統計学Ⅰ)

こちらは、多方面から名著と名高い書籍です。ただ、全くの初心者には向かないと思います。本書は統計学の基礎を一通り触ったことがある人向けだと思っています。一通り見聞きしたことある人が、もう一度しっかり身に着けるために読むなどの使い方が良いのではないかと考えています。

また、本ブログでは、本書の解答集を作成しています。必要に応じて参照頂けますと幸いです。

contents-open.hatenablog.com

オススメ書籍2:完全独習 統計学入門 小島 寛之 (著)

こちらは、完全に初学者向けの教科書です。私は大学の研究室時代に、教授にここから始めなさいと言われました。標準偏差や分布に自信が無い方はこちらから始めてみては如何でしょうか?

オススメ書籍3:生物学を学ぶ人のための統計のはなし 粕谷 英一 (著)

こちらは、生物学・健康学・医学などの分野で活動する人向けの参考書です。これらの分野では、検定や有意差などの議論が求められます。そのような時に困らないようにするための参考書です。生物学などを専攻する方はこれを参考にしてみて下さい。

片持ち梁・両持ち梁の固有振動数の公式と導出

こんてんつ

梁の固有振動数(共進周波数)の式を導出する。

  • 結論
  • 導出
  • 梁の横振動の支配方程式の導出
  • 微分方程式一般解の導出
  • 具体的な固有振動数の導出
  • 片持ち梁 固定–自由
  • 片持ち梁 ピン–自由
  • 両持ち梁 固定–固定
  • 両持ち梁 ピン–ピン
  • 両持ち梁 固定–ピン

結論

梁の横振動の支配方程式


\displaystyle
EI \frac{\partial^4 y}{\partial x^4} + \rho A \frac{\partial^2 y}{\partial t^2} = 0

微分方程式の一般解


\displaystyle
y = W(x) = C_1 \cosh(\beta x) + C_2 \sinh(\beta x) + C_3 \cos(\beta x) + C_4 \sin(\beta x) \\
y(x,t) = W(x) e^{i \omega t} \\
\beta = \left( \frac{\rho A \omega^2}{EI} \right)^{1/4}

固有振動数


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

 \lambdaの値

支持条件  \lambda_1  \lambda_2  \lambda_3
片持ち梁 固定–自由 1.8751 4.6941 7.8548
片持ち梁 ピン–自由 3.9266 7.0686 10.2102
両持ち梁 固定–固定 4.7300 7.8532 10.9956
両持ち梁 ピン–ピン π ≈ 3.1416 2π ≈ 6.2832 3π ≈ 9.4248
両持ち梁 固定–ピン 3.9266 7.0686 10.2102

導出

梁の横振動の支配方程式の導出

任意の梁の微小長さdxに働く

  • 慣性力dF
  • せん断力dS

のつり合いを考える。

慣性力dFは断面積A、単位長さ当たりの密度\rho、縦弾性係数E、断面二次モーメントIを用いて、


\displaystyle
dF=- \rho A \frac{\partial^2 y}{\partial t^2} dx

と表せる。一方せん断力dSは、微小領域の左右のせん断力の差として表されるため、断面の左右の位置でのせん断力の変化を考慮して、


\displaystyle
dS = \frac{\partial S}{\partial x} dx

となる。一方で、せん断力Sは曲げモーメントMの変化率であるから、


\displaystyle
S = \frac{\partial M}{\partial x}

であること、加えて梁のたわみの微分方程式から、


\displaystyle
M = -EI \frac{\partial^2 y}{\partial x^2}

である。これらを用いて、


\displaystyle
dS = \frac{\partial}{\partial x} \left( \frac{\partial M}{\partial x}  \right) dx =\frac{\partial}{\partial x} \left( -EI \frac{\partial^3 y}{\partial x^3} \right) dx = -EI \frac{\partial^4 y}{\partial x^4} dx

よって、dFdSのつり合いより、Euler-Bernoulli 梁理論における横振動の支配方程式、


\displaystyle
EI \frac{\partial^4 y}{\partial x^4} + \rho A \frac{\partial^2 y}{\partial t^2} = 0

が得られる。

微分方程式一般解の導出

振動モードを考えるために、一般解y(x,t)を「空間依存W(x)」と「時間依存e^{i \omega t}」で変数分離された形


\displaystyle
y(x,t) = W(x) e^{i \omega t}

になると仮定する。振動時の梁の節や腹を表すような空間依存の一般解が分かれば良く、これを支配方程式に代入すると、


\displaystyle
\begin{eqnarray}
&& EI \frac{\partial^4 (W(x) e^{i \omega t})}{\partial x^4} + \rho A \frac{\partial^2 (W(x) e^{i \omega t})}{\partial t^2} = 0 \\
&& EI \frac{d^4 W}{dx^4} e^{i \omega t} - \rho A \omega^2 W e^{i \omega t} = 0 \\
&& \frac{d^4 W}{dx^4} -  \frac{\rho A \omega^2}{EI} W = 0 \\
&& \frac{d^4 W}{dx^4} -  \beta^4 W = 0 
\end{eqnarray}

となる。ここで、


\displaystyle
\beta = \left( \frac{\rho A \omega^2}{EI} \right)^{1/4}

と置いた。得られた微分方程式は、線形斉次微分方程式である。特性方程式を求めるためにW=e^{\lambda x}と置くと、


\begin{eqnarray}
\displaystyle
&& \lambda^4 e^{\lambda x} - \beta^4 e^{\lambda x} = 0 \\
&& \lambda^4 - \beta^4 = 0 \\
&& \lambda = \pm \beta, \pm i \beta
\end{eqnarray}

となる。線形斉次微分方程式の解の重ね合わせの原理により、


\displaystyle
W(x) = {C_1}' e^{\beta x} + {C_2}' e^{-\beta x} + {C_3}' e^{i \beta x} + {C_4}' e^{-i \beta x}

となるが、実関数の方が扱いやすいため


\begin{eqnarray}
\displaystyle
{C_1}'e^{\beta x} = {C_1}' \left\{ \cosh(\beta x) + \sinh(\beta x) \right \} \\
{C_2}' e^{-\beta x} = {C_2}' \left\{ \cosh(\beta x) - \sinh(\beta x) \right \}
\end{eqnarray}

より、


\displaystyle
C_1 \cosh(\beta x) + C_2 \sinh(\beta x)

が得られ、同様に、


\begin{eqnarray}
\displaystyle
{C_3}'  e^{i \beta x} = {C_3}' \left\{ \cos(\beta x) + i \sin(\beta x) \right \} \\
{C_4}' e^{-i \beta x} = {C_4}' \left\{ \cos(\beta x) - i \sin(\beta x) \right \} 
\end{eqnarray}

より、


\displaystyle
C_3 \cos(\beta x) + C_4 \sin(\beta x)

が得られる。よってこれらを重ね合わせた、


\displaystyle
y = W(x) = C_1 \cosh(\beta x) + C_2 \sinh(\beta x) + C_3 \cos(\beta x) + C_4 \sin(\beta x)

微分方程式の解となる。

具体的な固有振動数の導出

片持ち梁(固定-自由)の固有値

梁の長さをLと置く。梁の一端が固定されており、もう一端が自由端の時、支持側の変位0、傾き0より、


\displaystyle
W(0) = 0 \\
W'(0) = 0

自由端側のモーメント M = -EI ( \partial ^ 2 y / \partial x ^ 2) = 0、せん断力  S = \partial M / \partial x = -EI ( \partial ^ 3 y / \partial x ^ 3)=0より、


\displaystyle
W''(L) = 0 \\
W'''(L) = 0

となる。これより、


\displaystyle
C_1 + C_3 = 0 \\
C_2 + C_4 = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) - C_3 \cos(\beta L) - C_4 \sin(\beta L) = 0 \\
C_1 \sinh(\beta L) + C_2 \cosh(\beta L) + C_3 \sin(\beta L) - C_4 \cos(\beta L) = 0

が得られる。よって、


\displaystyle
\begin{pmatrix}
1 & 0 & 1 & 0 \\
0 & 1 & 0 & 1 \\
\cosh(\beta L) & \sinh(\beta L) & -\cos(\beta L) & -\sin(\beta L) \\
\sinh(\beta L) & \cosh(\beta L) & \sin(\beta L) & -\cos(\beta L)
\end{pmatrix}
\begin{pmatrix}
C_1 \\ C_2 \\ C_3 \\ C_4
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 0
\end{pmatrix}

であり、この連立一次方程式が非自明な解を持つ条件は、係数行列が正則でないこと、言い換えれば行列の行列式がゼロになることであり、


\displaystyle
\det (A) = 0

より、これを計算すると、


\displaystyle
\cosh(\beta L)\cos(\beta L) = -1

を得る。この超越方程式を解析的に解くのは困難であり、数値計算で解 \beta Lを求めると、第一モード、第二モード、第三モードとして、 \lambda = \beta L = 1.875, 4.694, 7.855となることが知られている。この時の固有振動数は、


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

片持ち梁(ピン-自由)の固有値

梁の長さをLと置く。梁の一端がピン支持、もう一端が自由端の時、支持側の変位0、モーメント0より、


\displaystyle
W(0) = 0 \\
W''(0) = 0

自由端側のモーメント M = -EI ( \partial ^ 2 y / \partial x ^ 2) = 0、せん断力  S = \partial M / \partial x = -EI ( \partial ^ 3 y / \partial x ^ 3)=0より、


\displaystyle
W''(L) = 0 \\
W'''(L) = 0

となる。これより、


\displaystyle
C_1 + C_3 = 0 \\
C_1 - C_3 = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) - C_3 \cos(\beta L) - C_4 \sin(\beta L) = 0 \\
C_1 \sinh(\beta L) + C_2 \cosh(\beta L) + C_3 \sin(\beta L) - C_4 \cos(\beta L) = 0

が得られる。よって、


\displaystyle
\begin{pmatrix}
1 & 0 & 1 & 0 \\
1 & 0 & -1 & 0 \\
\cosh(\beta L) & \sinh(\beta L) & -\cos(\beta L) & -\sin(\beta L) \\
\sinh(\beta L) & \cosh(\beta L) & \sin(\beta L) & -\cos(\beta L)
\end{pmatrix}
\begin{pmatrix}
C_1 \\ C_2 \\ C_3 \\ C_4
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 0
\end{pmatrix}

であり、この連立一次方程式が非自明な解を持つ条件は、係数行列が正則でないこと、言い換えれば行列の行列式がゼロになることであり、


\displaystyle
\det (A) = 0

より、これを計算すると、


\displaystyle
\sinh(\beta L)\cos(\beta L) - \cosh(\beta L)\sin(\beta L) = 0

を得る。この超越方程式を解析的に解くのは困難であり、数値計算で解 \beta Lを求めると、第一モード、第二モード、第三モードとして、 \lambda = \beta L = 3.9266, 7.0686, 10.2102となることが知られている。この時の固有振動数は、


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

両持ち梁(固定-固定)の固有値

梁の長さをLと置く。梁が固定支持の時、両端で変位0、傾き0より、


\displaystyle
W(0) = 0 \\
W'(0) = 0 \\
W(L) = 0 \\
W'(L) = 0

となる。これより、


\displaystyle
C_1 + C_3 = 0 \\
C_2 + C_4 = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) + C_3 \cos(\beta L) + C_4 \sin(\beta L) = 0 \\
C_1 \sinh(\beta L) + C_2 \cosh(\beta L) - C_3 \sin(\beta L) + C_4 \cos(\beta L) = 0

が得られる。よって、


\displaystyle
\begin{pmatrix}
1 & 0 & 1 & 0 \\
0 & 1 & 0 & 1 \\
\cosh(\beta L) & \sinh(\beta L) & \cos(\beta L) & \sin(\beta L) \\
\sinh(\beta L) & \cosh(\beta L) & -\sin(\beta L) & \cos(\beta L)
\end{pmatrix}
\begin{pmatrix}
C_1 \\ C_2 \\ C_3 \\ C_4
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 0
\end{pmatrix}

であり、この連立一次方程式が非自明な解を持つ条件は、係数行列が正則でないこと、言い換えれば行列の行列式がゼロになることであり、


\displaystyle
\det (A) = 0

より、これを計算すると、


\displaystyle
\cosh(\beta L)\cos(\beta L) = 1

を得る。この超越方程式を解析的に解くのは困難であり、数値計算で解 \beta Lを求めると、第一モード、第二モード、第三モードとして、 \lambda = \beta L = 4.7300, 7.8532, 10.9956となることが知られている。この時の固有振動数は、


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

両持ち梁(ピン-ピン)の固有値

梁の長さをLと置く。梁の両端がピン支持の時、支持側の変位0、モーメント0より、


\displaystyle
W(0) = 0 \\
W''(0) = 0 \\
W(L) = 0 \\
W''(L) = 0

となる。これより、


\displaystyle
C_1 + C_3 = 0 \\
C_1 - C_3 = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) + C_3 \cos(\beta L) + C_4 \sin(\beta L) = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) - C_3 \cos(\beta L) - C_4 \sin(\beta L) = 0

が得られる。よって、


\displaystyle
\begin{pmatrix}
1 & 0 & 1 & 0 \\
1 & 0 & -1 & 0 \\
\cosh(\beta L) & \sinh(\beta L) & \cos(\beta L) & \sin(\beta L) \\
\cosh(\beta L) & \sinh(\beta L) & -\cos(\beta L) & -\sin(\beta L)
\end{pmatrix}
\begin{pmatrix}
C_1 \\ C_2 \\ C_3 \\ C_4
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 0
\end{pmatrix}

であり、この連立一次方程式が非自明な解を持つ条件は、係数行列が正則でないこと、言い換えれば行列の行列式がゼロになることであり、


\displaystyle
\det (A) = 0

より、これを計算すると、


\displaystyle
\sin(\beta L) = 0

を得る。この超越方程式を解くと、 \beta L = n\pi (nは自然数)となる。よって、第一モード、第二モード、第三モードとして、 \lambda = \beta L = \pi, 2\pi, 3\piとなる。この時の固有振動数は、


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

両持ち梁(固定-ピン)の固有値

梁の長さをLと置く。梁の一端が固定支持、もう一端がピン支持の時、支持側の変位0、傾き0より、


\displaystyle
W(0) = 0 \\
W'(0) = 0

ピン支持側の変位0、モーメント0より、


\displaystyle
W(L) = 0 \\
W''(L) = 0

となる。これより、


\displaystyle
C_1 + C_3 = 0 \\
C_2 + C_4 = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) + C_3 \cos(\beta L) + C_4 \sin(\beta L) = 0 \\
C_1 \cosh(\beta L) + C_2 \sinh(\beta L) - C_3 \cos(\beta L) - C_4 \sin(\beta L) = 0

が得られる。よって、


\displaystyle
\begin{pmatrix}
1 & 0 & 1 & 0 \\
0 & 1 & 0 & 1 \\
\cosh(\beta L) & \sinh(\beta L) & \cos(\beta L) & \sin(\beta L) \\
\cosh(\beta L) & \sinh(\beta L) & -\cos(\beta L) & -\sin(\beta L)
\end{pmatrix}
\begin{pmatrix}
C_1 \\ C_2 \\ C_3 \\ C_4
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\ 0 \\ 0
\end{pmatrix}

であり、この連立一次方程式が非自明な解を持つ条件は、係数行列が正則でないこと、言い換えれば行列の行列式がゼロになることであり、


\displaystyle
\det (A) = 0

より、これを計算すると、


\displaystyle
\tan(\beta L) = \tanh(\beta L)

を得る。この超越方程式を解析的に解くのは困難であり、数値計算で解 \beta Lを求めると、第一モード、第二モード、第三モードとして、 \lambda = \beta L = 3.9266, 7.0686, 10.2102となることが知られている。この時の固有振動数は、


\displaystyle
f = \frac{\omega}{2 \pi} = \frac{1}{2 \pi}  \beta ^ 2 \sqrt{\frac{EI}{\rho A}} =   \frac{\lambda ^ 2}{2 \pi L ^2}  \sqrt{\frac{EI}{\rho A}}

【R】時系列データのサンプル作成

こんてんつ

時系列データのサンプルを簡易的に用意する方法を記述する。今回は、timevalueの値を持つサンプルを作成する。

  • 乱数生成を使った作戦
  • data.frameでベタ打ち作戦
  • csvファイルから読み込む作戦
  • (補足)mm:ss形式の行を追加する方法

乱数生成を使った作成

コード

dat <- 
  data.frame(
    time = runif(30, min = 0, max = 300),
    value = rnorm(30)
    ) %>%
  arrange(time) %>%
  mutate(time = round(time, digits = 2),
         value = round(value, digits = 2)+time*0.05)

出力

time value
24.73   1.2765
35.25   2.8025
40.4    1.85
41.61   1.3005
76.63   4.2915
85.84   1.632
117.06  5.493
134.09  5.9745
137.32  6.436
138.69  6.2945
142.5   6.515
154.26  7.923
155.73  7.4765
168.1   8.905
192.52  10.946
197.1   11.065
211.52  12.476
215.73  10.5265
220.98  9.269
249.13  10.0165
250.8   11.17
271.21  11.8405
271.72  14.346
274.44  14.362
280.4   12.26
281.12  13.776
282 14.56
284 11.79
293.47  15.3735
296.67  13.9835

解説

runif(30, min = 0, max = 300)は0から300の範囲で30個のランダムな値を生成する。rnorm(30)正規分布から30個のランダムな値を生成する。data.frameは一般的には、次の形で利用する。

# データフレームの作成
my_data <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 22),
  Score = c(95, 89, 75)
)

# 作成したデータフレームの表示
print(my_data)

#出力
    Name Age Score
1  Alice  25    95
2    Bob  30    89
3 Charlie  22    75

その他、arrange(time)timeの昇順にソートを行っている。また、mutateround()で四捨五入をして丸めている。

contents-open.hatenablog.com

data.frameでベタ打ち作戦

コード

dat <- data.frame(
  time = c(24.73, 35.25, 40.4, 41.61, 76.63, 85.84, 117.06, 134.09, 137.32, 138.69, 
           142.5, 154.26, 155.73, 168.1, 192.52, 197.1, 211.52, 215.73, 220.98, 249.13, 
           250.8, 271.21, 271.72, 274.44, 280.4, 281.12, 282, 284, 293.47, 296.67),
  value = c(1.2765, 2.8025, 1.85, 1.3005, 4.2915, 1.632, 5.493, 5.9745, 6.436, 6.2945,
            6.515, 7.923, 7.4765, 8.905, 10.946, 11.065, 12.476, 10.5265, 9.269, 10.0165,
            11.17, 11.8405, 14.346, 14.362, 12.26, 13.776, 14.56, 11.79, 15.3735, 13.9835)
)

csvファイルから読み込む作戦

コード

dat <- read.csv("mydata.csv")

(補足)mm:ss形式の行を追加する方法

dat %>% 
  mutate(time_mmss = sprintf("%02d:%02d", time %/% 60, round(time %% 60))) %>%
  select(time, time_mmss, value)

【R】秒単位で整理された時系列データをmm:ss形式でグラフプロットする

こんてんつ

時系列データをプロットしたいとき、データは秒で整列されているが、グラフの横軸はmm:ssの表示の方が見やすい場合がある。その時に使える方法を紹介する。

チートシート

コード

dat %>%
  ggplot(aes(x = time, y = value)) +
  geom_line() +
  scale_x_continuous(labels = function(x) sprintf("%02d:%02d", as.integer(floor(x / 60)), as.integer(x %% 60))) +
  labs(x = "Time (mm:ss)",y = "Value")

出力

サンプルデータ

time value
24.73   0.5346
35.25   1.745
40.4    0.978
41.61   1.6122
76.63   1.9926
85.84   4.3768
117.06  2.7012
134.09  3.4118
137.32  3.1764
138.69  3.4138
142.5   3.46
154.26  3.2952
155.73  3.4246
168.1   3.862
192.52  5.1704
197.1   5.152
211.52  6.1304
215.73  4.5746
220.98  6.1996
249.13  7.4226
250.8   6.386
271.21  7.1442
271.72  6.1944
274.44  6.1288
280.4   7.368
281.12  5.9024
282 6.1
284 8.09
293.47  6.5694
296.67  6.7834

【R】データフレームの特定の列を四捨五入する方法(mutate、round)

こんてんつ

データフレームの列を指定して四捨五入したい場面がある。その時につかえるコマンドを紹介する。

チートシート

コード

dat %>% 
  mutate(time = round(time, digits = 2))

解説

roundで、指定した列(time)を小数第二位まで(digits = 2)で丸めている。mutateと組みあわせることで置換することができる。

サンプルデータ

#四捨五入前
time    value
1.092821988 0.908130569
4.295000131 -0.668832741
5.590229016 0.049779323
6.653013057 1.188054982
16.35518947 -0.322950312
38.88655601 0.219548011
47.25476343 -0.609888171
50.61970835 0.201942437
53.95446466 0.370294421
57.29383249 -1.113040194
66.27735144 -0.090865006
103.8869736 -0.194863607
108.6246822 -0.012996542
117.4398822 -1.246182062
148.4241006 0.42119744
148.4321235 -1.032527137
149.7821984 1.016773978
161.2059699 -0.764005911
186.8323629 -0.509764512
190.914034  0.279108394
#四捨五入後
time    value
1.09    0.908130569
4.3 -0.668832741
5.59    0.049779323
6.65    1.188054982
16.36   -0.322950312
38.89   0.219548011
47.25   -0.609888171
50.62   0.201942437
53.95   0.370294421
57.29   -1.113040194
66.28   -0.090865006
103.89  -0.194863607
108.62  -0.012996542
117.44  -1.246182062
148.42  0.42119744
148.43  -1.032527137
149.78  1.016773978
161.21  -0.764005911
186.83  -0.509764512
190.91  0.279108394

【R】分:秒(mm:ss)の様な入力を、秒に変換する関数

こんてんつ

10:10の様なmm:ssの入力を、610秒の様な秒に変換する関数を紹介する。

チートシート

関数

to_seconds <- function(input_time) {
  
  time_parts <- strsplit(input_time, ":")[[1]]
  
  minutes <- as.integer(time_parts[1])
  seconds <- as.integer(time_parts[2])
  
  total_seconds <- minutes * 60 + seconds
  
  return(total_seconds)
}

使用例

print(to_seconds("10:10"))

解説

strsplit(time, ":")[[1]][[1]]の意味について解説する。strsplit(time, ":")[[1]]"10:10"の様な入力を、c("10", "10")に変換する。strsplit(time, ":")はリストを返し、[[1]]を付けることで、リストの最初の要素の値を返すことになる。具体的には、

> strsplit("10:10", ":")
[[1]]
[1] "10" "10"

> strsplit("10:10", ":")[[1]]
[1] "10" "10"