我有一個如下資料框:
dat <- data.frame(Target = c(rep("01", times = 8), rep("02", times = 5),
rep("03", times = 4)),
targ2clicks = c(1, 1, 1, 1, 0, 0 ,0 , 1, 1, 0, 0, 0, 1,
0, 0, 0, 1))
Target targ2clicks
1 01 1
2 01 1
3 01 1
4 01 1
5 01 0
6 01 0
7 01 0
8 01 1
9 02 1
10 02 0
11 02 0
12 02 0
13 02 1
14 03 0
15 03 0
16 03 0
17 03 1
在 targ2clicks 列中每個目標的第一個實體是 1 的情況下,我想在該目標第一次出現 0 之前從資料框中洗掉該列中包含 1 的所有行。但是,如果目標的第一個值為 0,我想保留所有值/行。
我想要結束的是:
Target targ2clicks
01 0
01 0
01 0
01 1
02 0
02 0
02 0
02 1
03 0
03 0
03 0
03 1
如果 Target 的所有實體都是 1 且沒有 0(不在示例 df 中,而只是在任何解決方案中考慮),則應洗掉該 Target 的所有行。
我已經嘗試以各種不同的方式對此進行編碼,但沒有成功!非常感謝任何幫助。
uj5u.com熱心網友回復:
你可以使用ave() cumsum():
dat[with(dat, ave(targ2clicks == 0, Target, FUN = cumsum)) > 0, ]
# Target targ2clicks
# 5 01 0
# 6 01 0
# 7 01 0
# 8 01 1
# 10 02 0
# 11 02 0
# 12 02 0
# 13 02 1
# 14 03 0
# 15 03 0
# 16 03 0
# 17 03 1
它的dplyr等價物是
library(dplyr)
dat %>%
group_by(Target) %>%
filter(cumany(targ2clicks == 0)) %>%
ungroup()
uj5u.com熱心網友回復:
我們可以slice使用match
library(dplyr)
dat %>%
group_by(Target) %>%
slice(match(0, targ2clicks):n()) %>%
ungroup
-輸出
# A tibble: 12 × 2
Target targ2clicks
<chr> <dbl>
1 01 0
2 01 0
3 01 0
4 01 1
5 02 0
6 02 0
7 02 0
8 02 1
9 03 0
10 03 0
11 03 0
12 03 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494872.html
上一篇:將資料框轉換為矩陣?
