r 按因素切割数据框
r cut dataframe by factors
假设我有这个
+-------+-----+------+
| Month | Day | Hour |
+-------+-----+------+
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 1 | 1 | 4 |
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 1 | 2 | 3 |
| 1 | 2 | 4 |
| 2 | 1 | 1 |
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 1 | 4 |
+-------+-----+------+
我想 cut
按月和日因素得到这个
+-------+-----+------+-------+
| Month | Day | Hour | Block |
+-------+-----+------+-------+
| 1 | 1 | 1 | [1,2] |
| 1 | 1 | 2 | [1,2] |
| 1 | 1 | 3 | [3,4] |
| 1 | 1 | 4 | [3,4] |
| 1 | 2 | 1 | [1,2] |
| 1 | 2 | 2 | [1,2] |
| 1 | 2 | 3 | [3,4] |
| 1 | 2 | 4 | [3,4] |
| 2 | 1 | 1 | [1,2] |
| 2 | 1 | 2 | [1,2] |
| 2 | 1 | 3 | [3,4] |
| 2 | 1 | 4 | [3,4] |
+-------+-----+------+-------+
我想也许使用 by
或 tapply
可能是一种方式,但我不知道如何。
我们可以使用 cut
为一天中的每个小时创建一个序列,并用方括号替换括号:
df1$Block <- cut(df1$Hour, c(1,seq(2,24, by=2)), include.lowest=TRUE)
df1$Block <- sub("(", "[", df1$Block, fixed=T)
df1
# Month Day Hour Block
# 1 1 1 1 [1,2]
# 2 1 1 2 [1,2]
# 3 1 1 3 [2,4]
# 4 1 1 4 [2,4]
# 5 1 2 1 [1,2]
# 6 1 2 2 [1,2]
# 7 1 2 3 [2,4]
# 8 1 2 4 [2,4]
# 9 2 1 1 [1,2]
# 10 2 1 2 [1,2]
# 11 2 1 3 [2,4]
# 12 2 1 4 [2,4]
假设我有这个
+-------+-----+------+
| Month | Day | Hour |
+-------+-----+------+
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 1 | 1 | 4 |
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 1 | 2 | 3 |
| 1 | 2 | 4 |
| 2 | 1 | 1 |
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 1 | 4 |
+-------+-----+------+
我想 cut
按月和日因素得到这个
+-------+-----+------+-------+
| Month | Day | Hour | Block |
+-------+-----+------+-------+
| 1 | 1 | 1 | [1,2] |
| 1 | 1 | 2 | [1,2] |
| 1 | 1 | 3 | [3,4] |
| 1 | 1 | 4 | [3,4] |
| 1 | 2 | 1 | [1,2] |
| 1 | 2 | 2 | [1,2] |
| 1 | 2 | 3 | [3,4] |
| 1 | 2 | 4 | [3,4] |
| 2 | 1 | 1 | [1,2] |
| 2 | 1 | 2 | [1,2] |
| 2 | 1 | 3 | [3,4] |
| 2 | 1 | 4 | [3,4] |
+-------+-----+------+-------+
我想也许使用 by
或 tapply
可能是一种方式,但我不知道如何。
我们可以使用 cut
为一天中的每个小时创建一个序列,并用方括号替换括号:
df1$Block <- cut(df1$Hour, c(1,seq(2,24, by=2)), include.lowest=TRUE)
df1$Block <- sub("(", "[", df1$Block, fixed=T)
df1
# Month Day Hour Block
# 1 1 1 1 [1,2]
# 2 1 1 2 [1,2]
# 3 1 1 3 [2,4]
# 4 1 1 4 [2,4]
# 5 1 2 1 [1,2]
# 6 1 2 2 [1,2]
# 7 1 2 3 [2,4]
# 8 1 2 4 [2,4]
# 9 2 1 1 [1,2]
# 10 2 1 2 [1,2]
# 11 2 1 3 [2,4]
# 12 2 1 4 [2,4]