【发布时间】:2020-05-22 14:39:04
【问题描述】:
我想在 R 中获取包含负数和正数 (diff_start) 的列的最大负值和另一列 (diff_end) 的最小正值。
数据:
data <- read.table(text ="
id lab diff_start diff_end
1 hb -1.7 -1.8
1 hb -0.3 -0.3
1 hb 0.6 0.5
1 hb 0.7 0.8", header = TRUE)
期望的输出:
# id lab diff_start diff_end
# 1 hb -0.3 0.5
我做了什么:
- 将数据分成2份,过滤
<= 0为diff_start和>= 0为diff_end - 获取感兴趣的摘要,然后将它们合并回来
我认为这很长而且效率很低,并希望使它更简洁。
full_join(
data %>%
group_by(id, lab) %>%
filter(diff_start <= 0) %>%
summarise(diff_start = max(diff_start)) %>%
ungroup(),
data %>%
group_by(id, lab) %>%
filter(diff_start >= 0) %>%
summarise(diff_end = min(diff_end)) %>%
ungroup())
【问题讨论】: