更新(以下の最初の質問)
@akrunと@ulfelderのおかげで、最初の例は 1 年しかなかったので、十分に複雑ではないことに気付きました。数年にわたるデータは、より現実的であり、他の人にとってより役立つ場合があります。
代わりに、私のデータは、
df <- structure(list(yr_month = structure(1:7, .Label = c("2014-1", "2014-2",
"2014-3", "2015-4", "2016-4", "2016-6", "2017-7"), class = "factor"),
a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25,
3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b"
), row.names = c(NA, 7L), class = "data.frame")
df
# yrQ a b
# 1 2014-1 4.14 4.25
# 2 2014-2 2.83 3.50
# 3 2014-3 3.71 3.50
# 4 2015-4 4.15 3.50
# 5 2016-4 4.63 3.50
# 6 2016-6 4.91 3.50
# 7 2017-7 5.31 5.00
そして、2014 年 3 月以前、2014-3、2014-3 と 2016-4 の間、および 2016-4 以降をカバーするカテゴリを作成したいと考えました。このようなものを手に入れるために、
# yr.cat yrQ a b
# 1 "A" 2014-1 4.14 4.25
# 2 "A" 2014-2 2.83 3.50
# 3 "B" 2014-3 3.71 3.50
# 4 "B" 2015-4 4.15 3.50
# 5 "B" 2016-4 4.63 3.50
# 6 "C" 2016-6 4.91 3.50
# 7 "C" 2017-7 5.31 5.00
最初の質問
このようなデータセットがあるとします。
df <- structure(list(yr_month = structure(1:7, .Label = c("2016-1", "2016-2",
"2016-3", "2016-4", "2016-5", "2016-6", "2016-7"), class = "factor"),
a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25,
3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b"
), row.names = c(NA, 7L), class = "data.frame")
df
# yrQ a b
# 1 2016-1 4.14 4.25
# 2 2016-2 2.83 3.50
# 3 2016-3 3.71 3.50
# 4 2016-4 4.15 3.50
# 5 2016-5 4.63 3.50
# 6 2016-6 4.91 3.50
# 7 2016-7 5.31 5.00
これで、数値変数ifelse()を分類するために使用できます。aこのような、
df$a.cat <- ifelse(df$a < 3.8, c("tiny"), ifelse(df$a < 4.8, c("medium"), c("huge")) )
df
# yrQ a b a.cat
# 1 2016-1 4.14 4.25 medium
# 2 2016-2 2.83 3.50 tiny
# 3 2016-3 3.71 3.50 tiny
# 4 2016-4 4.15 3.50 medium
# 5 2016-5 4.63 3.50 medium
# 6 2016-6 4.91 3.50 huge
# 7 2016-7 5.31 5.00 huge
しかし、ある期間を表す変数をクレートしたい場合はどうでしょうか。2016 年 3 月より前、2016-3と の間2016-3、2016-5と の後2016-5。データを変換してからts、それwindow()を切り取り、元に戻すことができることはわかっていますが、 if else on を使用してこのようなものに到達するためのよりスマートな方法はありませんyrQか?
たどり着きたいのはこういうことなのですが、
yr.cat yrQ a b
1 "A" 2016-1 4.14 4.25
2 "A" 2016-2 2.83 3.50
3 "B" 2016-3 3.71 3.50
4 "B" 2016-4 4.15 3.50
5 "B" 2016-5 4.63 3.50
6 "C" 2016-6 4.91 3.50
7 "C" 2016-7 5.31 5.00