我在 R 中有一個超過 600k obs 的資料集。它看起來像這樣:
id <- c("58497484", "58544005", "74766653", "74764718", "62824455", "58497484", "58497484", "74766653")
key <- c("5718368_09/06/1981_3_2014", "2077485_02/06/1977_8_2014", "2091585_23/10/1982_1_2014", "2077388_30/01/2000_11_2017", "2082225_02/07/1998_10_2017", "2077450_04/05/2001_1_2016", "2077477_03/03/1978_8_2017", "2077388_30/01/2020_11_2019")
out <- c("2.1 - Reason 1", "1.2 - Reason 2", "1.2 - Reason 2", "1.2 - Reason 2", "1.2 - Reason 2", "1.3 - Reason 3" , "1.2 - Reason 2", "3.6 - Reason 8")
data <- as.data.frame(cbind(id, key, out))
如您所見,我的一些 ID 號碼會重復出現。我需要做的是將這些 ID 分組,以便我可以看到所有分組的 obs。我使用此代碼來執行此操作:
data <- data %>%
arrange(id) %>%
mutate(id = ifelse(duplicated(id), "", id))
當我這樣做時,我的 df 看起來像這樣:
id key out
58497484 5718368_09/06/1981_3_2014 2.1 - Reason 1
2077450_04/05/2001_1_2016 1.3 - Reason 3
2077477_03/03/1978_8_2017 1.2 - Reason 2
58544005 2077485_02/06/1977_8_2014 1.2 - Reason 2
62824455 2082225_02/07/1998_10_2017 1.2 - Reason 2
74764718 2077388_30/01/2000_11_2017 1.2 - Reason 2
74766653 2091585_23/10/1982_1_2014 1.2 - Reason 2
2077388_30/01/2020_11_2019 3.6 - Reason 8
我現在需要做的是使用變數“out”過濾我的 df,但如果“out”以 2 或 3 開頭,我想將所有暫存器分組,所以我的 df 看起來像這樣:
id key out
58497484 5718368_09/06/1981_3_2014 2.1 - Reason 1
2077450_04/05/2001_1_2016 1.3 - Reason 3
2077477_03/03/1978_8_2017 1.2 - Reason 2
74766653 2091585_23/10/1982_1_2014 1.2 - Reason 2
2077388_30/01/2020_11_2019 3.6 - Reason 8
有什么辦法可以做到嗎?提前致謝。
uj5u.com熱心網友回復:
最初,不要將duplicated“id”更改為空白 ( ''),而是filter先進行分組,然后對“id”進行更改
library(dplyr)
library(stringr)
data %>%
group_by(id) %>%
dplyr::filter(any(str_detect(out, "^(2|3)"))) %>%
ungroup %>%
arrange(id) %>%
mutate(id = replace(id, duplicated(id), ""))
-輸出
# A tibble: 5 × 3
id key out
<chr> <chr> <chr>
1 "58497484" 5718368_09/06/1981_3_2014 2.1 - Reason 1
2 "" 2077450_04/05/2001_1_2016 1.3 - Reason 3
3 "" 2077477_03/03/1978_8_2017 1.2 - Reason 2
4 "74766653" 2091585_23/10/1982_1_2014 1.2 - Reason 2
5 "" 2077388_30/01/2020_11_2019 3.6 - Reason 8
uj5u.com熱心網友回復:
雖然 akrun 是最好的方法,但我想提供另一種創建輔助列的方法:
data %>%
group_by(id) %>%
summarise(key, out) %>%
mutate(x = as.integer(substr(out, 1,1))) %>%
filter(any(x %in% 2 | x %in% 3)) %>%
mutate(id = ifelse(duplicated(id), "", id)) %>%
select(-x)
id key out
<chr> <chr> <chr>
1 "58497484" 5718368_09/06/1981_3_2014 2.1 - Reason 1
2 "" 2077450_04/05/2001_1_2016 1.3 - Reason 3
3 "" 2077477_03/03/1978_8_2017 1.2 - Reason 2
4 "74766653" 2091585_23/10/1982_1_2014 1.2 - Reason 2
5 "" 2077388_30/01/2020_11_2019 3.6 - Reason 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379738.html
上一篇:行號并轉到行
