我有一個看起來像這樣的資料框:
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 分組
- 創建一個新的邏輯列“標志”
- 標志應該有 TRUE
- 當 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
uj5u.com熱心網友回復:
我們可能需要一個absolute 柱來做到這一點。按'id1'和'value'列的olute值分組,檢查是否abs有兩個值(,然后將條件更改為(不清楚 OP 帖子中的邏輯)n() == 2distinct signn() > 1 & n_distinct(sign(value)) > 1
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454438.html
