捕获具有相同值和其他条件的符号变化
capture change in sign with same value and other conditions
我有一个如下所示的数据框:
df <- data.frame(id1 = c(232, 232, 232,233, 233, 233), value = c(20.1, -11.1, 11.1, 3.1, -4.1, 4.1),
dt = c('11-20', '11-02', '11-02', '11-03', '11-04','11-04'), id2 = c(21, 22, 23, 21, 25 ,26))
我想
- 按 id1 分组
- 创建一个新的逻辑列'flag'
- 标志应该为真
- 当id1有相同的dt时
- 相同的值但符号相反并且
- 不同的 id2
预期的输出将如下所示
id1 value dt id2 flag
1 232 20.1 11-20 21 FALSE
2 232 -11.1 11-02 22 TRUE
3 232 11.1 11-02 23 TRUE
4 233 3.1 11-03 21 FALSE
5 233 -4.1 11-04 25 TRUE
6 233 4.1 11-04 26 TRUE
我们可能需要 abs
olute 专栏来执行此操作。按'id1'和'value'列的abs
olute值进行分组,检查是否有两个值(n() == 2
)以及distinct
[=16]的个数=] 是 2。如果有超过 2 个元素,并且如果我们正在检查是否发生了不止一次反转,则将条件更改为 n() > 1 & n_distinct(sign(value)) > 1
(不清楚 OP 的逻辑 post)
library(dplyr)
df %>%
group_by(id1, grp = abs(value)) %>%
mutate(flag = n() == 2& n_distinct(sign(value)) == 2) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 6 × 5
id1 value dt id2 flag
<dbl> <dbl> <chr> <dbl> <lgl>
1 232 20.1 11-20 21 FALSE
2 232 -11.1 11-02 22 TRUE
3 232 11.1 11-02 23 TRUE
4 233 3.1 11-03 21 FALSE
5 233 -4.1 11-04 25 TRUE
6 233 4.1 11-04 26 TRUE
我有一个如下所示的数据框:
df <- data.frame(id1 = c(232, 232, 232,233, 233, 233), value = c(20.1, -11.1, 11.1, 3.1, -4.1, 4.1),
dt = c('11-20', '11-02', '11-02', '11-03', '11-04','11-04'), id2 = c(21, 22, 23, 21, 25 ,26))
我想
- 按 id1 分组
- 创建一个新的逻辑列'flag'
- 标志应该为真
- 当id1有相同的dt时
- 相同的值但符号相反并且
- 不同的 id2
预期的输出将如下所示
id1 value dt id2 flag
1 232 20.1 11-20 21 FALSE
2 232 -11.1 11-02 22 TRUE
3 232 11.1 11-02 23 TRUE
4 233 3.1 11-03 21 FALSE
5 233 -4.1 11-04 25 TRUE
6 233 4.1 11-04 26 TRUE
我们可能需要 abs
olute 专栏来执行此操作。按'id1'和'value'列的abs
olute值进行分组,检查是否有两个值(n() == 2
)以及distinct
[=16]的个数=] 是 2。如果有超过 2 个元素,并且如果我们正在检查是否发生了不止一次反转,则将条件更改为 n() > 1 & n_distinct(sign(value)) > 1
(不清楚 OP 的逻辑 post)
library(dplyr)
df %>%
group_by(id1, grp = abs(value)) %>%
mutate(flag = n() == 2& n_distinct(sign(value)) == 2) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 6 × 5
id1 value dt id2 flag
<dbl> <dbl> <chr> <dbl> <lgl>
1 232 20.1 11-20 21 FALSE
2 232 -11.1 11-02 22 TRUE
3 232 11.1 11-02 23 TRUE
4 233 3.1 11-03 21 FALSE
5 233 -4.1 11-04 25 TRUE
6 233 4.1 11-04 26 TRUE