Rは初めてです。別の列で設定された条件に基づいて、前の行を削除しようとしています。
dplyrとdata.tableを使用したソリューションを見つけました。これらは逆であるため、探しているものに近いと思います。
サンプルデータ:
Cust_ID | Date | Value
500219 | 2016-04-11 12:00:00 | 0
500219 | 2016-04-12 16:00:00 | A
500219 | 2016-04-14 11:00:00 | A
500219 | 2016-04-15 12:00:00 | B
500219 | 2016-05-23 09:00:00 | B
500219 | 2016-05-02 19:00:00 | C
500220 | 2016-04-11 12:00:00 | C
500220 | 2016-04-14 11:00:00 | C
500220 | 2016-04-15 12:00:00 | A
500220 | 2016-05-23 09:00:00 | A
500220 | 2016-05-02 19:00:00 | A
Cust_IDごとに、その行を含むValue == "A"の後の行のみを保持したいと思います。これにより、次のデータフレームが作成されます。
Cust_ID | Date | Value
500219 | 2016-04-12 16:00:00 | A
500219 | 2016-04-14 11:00:00 | A
500219 | 2016-04-15 12:00:00 | B
500219 | 2016-05-23 09:00:00 | B
500219 | 2016-05-02 19:00:00 | C
500220 | 2016-04-15 12:00:00 | A
500220 | 2016-05-23 09:00:00 | A
500220 | 2016-05-02 19:00:00 | A
これらは私がすでに見つけた解決策です(Rは前の行の値に基づいて行を削除します)
library(data.table)
setDT(df1)[df1[, if(any(Value == "A")) .I[seq(max(which(Value == "A")))]
else .I[1:.N] , by = Cust_ID]$V1]
library(dplyr)
df1 %>%
group_by(Cust_ID) %>%
slice(if(any(Value=="A")) seq(max(which(Value=="A"))) else row_number())
これは機能しますか:
> library(dplyr)
> df %>% group_by(Cust_ID) %>% filter(row_number() >= min(which(Value == 'A')))
# A tibble: 8 x 3
# Groups: Cust_ID [2]
Cust_ID Date Value
<dbl> <chr> <chr>
1 500219 2016-04-12 16:00:00 A
2 500219 2016-04-14 11:00:00 A
3 500219 2016-04-15 12:00:00 B
4 500219 2016-05-23 09:00:00 B
5 500219 2016-05-02 19:00:00 C
6 500220 2016-04-15 12:00:00 A
7 500220 2016-05-23 09:00:00 A
8 500220 2016-05-02 19:00:00 A
>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加