r - R:根据组与另一列的最大值相差的新列
问题描述
问题的标题可能不清楚,但我希望这些代码能清楚地说明我的问题。
我有一个包含三列的数据框。$传感器(A和B);一天中的$小时(0-4);以及温度 (1-5) 所取的 $value。
new.df <- data.frame(
sensor = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
hour_day = c(0:4, 0:4),
value = c(1, 1, 3, 1, 2, 1, 3, 4, 5, 2)
new.df
sensor hour_day value
1 A 0 1
2 A 1 1
3 A 2 3
4 A 3 1
5 A 4 2
6 B 0 1
7 B 1 3
8 B 2 4
9 B 3 5
10 B 4 2
我想创建一个新列,根据传感器指示小时与最大值的小时差。
期望的结果
sensor value hour_day hour_from_max_hour
1 A 1 0 -2
2 A 1 1 -1
3 A 3 2 0
4 A 1 3 1
5 A 2 4 2
6 B 1 0 -3
7 B 3 1 -2
8 B 4 2 -1
9 B 5 3 0
10 B 2 4 1
请注意,对于传感器 A(最大值 = 小时 2)和传感器 B(最大值 = 小时 3)。我只想要一个新列,告诉我传感器值组与最大传感器值相差多少小时。
提前谢谢你,如果我能提供更多信息,请告诉我。
编辑 以前的答案非常有帮助,我忘记了这个问题还有一个变量(天)。此外,有时一列中的最大值不止一个。在这种情况下,我想将差异基于第一个最大值。
df_add <- data.frame(
sensor = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B",
"A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
hour_day = c(0:4, 0:4, 0:4, 0:4),
value = c(1, 1, 3, 3, 2,
3, 2, 4, 4, 1,
1, 5, 6, 6, 2,
2, 1, 3, 3, 1),
day = c(1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
2, 2, 2, 2, 2)
)
df_add
sensor hour_day value day
1 A 0 1 1
2 A 1 1 1
3 A 2 3 1
4 A 3 3 1
5 A 4 2 1
6 B 0 3 1
7 B 1 2 1
8 B 2 4 1
9 B 3 4 1
10 B 4 1 1
11 A 0 1 2
12 A 1 5 2
13 A 2 6 2
14 A 3 6 2
15 A 4 2 2
16 B 0 2 2
17 B 1 1 2
18 B 2 3 2
19 B 3 3 2
20 B 4 1 2
解决方案
一个简单的管道就可以做到。你所要做的就是接受max(value)
指令mutate
。
new.df %>%
group_by(sensor) %>%
mutate(hour_from_max_hour = hour_day - hour_day[which(value == max(value))[1]])
## A tibble: 10 x 4
## Groups: sensor [2]
# sensor hour_day value hour_from_max_hour
# <fct> <int> <dbl> <int>
# 1 A 0 1. -2
# 2 A 1 1. -1
# 3 A 2 3. 0
# 4 A 3 1. 1
# 5 A 4 2. 2
# 6 B 0 1. -3
# 7 B 1 3. -2
# 8 B 2 4. -1
# 9 B 3 5. 0
#10 B 4 2. 1
推荐阅读
- java - 尝试将行添加到 DefaultTableModel 模型时出现 Java 空指针异常
- r - R - 计划比较中完全关闭的自由度(使用 afex - aov_ez - emmeans - 对)?
- linux - 如何在linux中使用单个命令调用程序?
- javascript - 带有增量的 IF 语句,并显示值
- node.js - 我可以使用 lambda:invoke 调用 AWS Lambda express 应用程序吗?
- regex - sed:匹配两行并插入一行
- ejabberd - 集群 ejabberd 的 MUC 和 PubSub 主机
- python - Python Websocket - ConnectionRefusedError:[Errno 111] 连接被拒绝
- c++ - 朋友,前向声明,C++
- c - 无法调用该函数...我不明白为什么没有调用该函数,我错过了什么?