【发布时间】:2022-01-16 09:21:26
【问题描述】:
我在 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 进行分组,这样我就可以看到所有分组的 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
有什么办法可以做到吗?提前致谢。
【问题讨论】:
-
如果
out中的任何 个值以2 或3 开头,而不是全部开头,您似乎想要保留id。对吗? -
@andrew_reece 完全正确!
-
如果有重复,你真的需要删除
id吗?或者您是否只需要按 R 对常见的id值进行逻辑分组?实际上,将重复的id值更改为空字符串似乎比实际更美观。 -
@andrew_reece 我需要将其更改为空字符串,因为它更容易识别哪个 obs 属于该 id,因为我要将这个 df 呈现给我的老板,它更容易理解。但你是对的,它完全是化妆品! :)
-
@TarJae 我的意思是,如果任何“out”变量行字符串以 2 或 3 开头,我想保持所有行的 ID 相同。
标签: r if-statement dplyr