如何在R中排列和选择以下行?
Posted
技术标签:
【中文标题】如何在R中排列和选择以下行?【英文标题】:How to arrange and select the following row in R? 【发布时间】:2022-01-22 03:43:49 【问题描述】:假设我有一个如下所示的数据集,然后,我继续通过使用 NU_DN 和 DATE_HOSP 排列行来对行进行分组:
NU_DN <- c("55284765", "55293825" , "55284765", "55293825", "55318351", "55293825")
DATE_HOSP <- c("2012-05-08", "2012-06-17", "2012-09-13", "2012-01-13", "2012-01-10", "2012-05-04" )
MOTIV <- c("2.1 - Reason 1", "1.2 - Reason 3", "6.7 - Reason 8", "2.2 - Reason 2", "3.3 - Reason 4", "6.9 - Reason 10")
data <- as.data.frame(cbind(NU_DN, DATE_HOSP, MOTIV))
data <- data %>%
arrange(NU_DN, DATE_HOSP)%>%
type.convert(as.is = TRUE)%>%
group_by(NU_DN) %>%
ungroup()
完成后,我得到以下数据框:
NU_DN DATE_HOSP MOTIV
55284765 2012-05-08 2.1 - Reason 1
55284765 2012-09-13 6.7 - Reason 8
55293825 2012-01-13 2.2 - Reason 2
55293825 2012-05-04 6.9 - Reason 10
55293825 2012-06-17 1.2 - Reason 3
55318351 2012-01-10 3.3 - Reason 4
如果“MOTIV”以 2 或 3 开头,我想要做的是选择集群的下一行。因此,如果 NU_DN 55293825 的 MOTIV 是“2.2 - 原因 2”,我想选择下一行它的 MOTIV 是“6.9 - 原因 10”和“1.2 - 原因 3”。我想要的输出如下:
NU_DN DATE_HOSP MOTIV
55284765 2012-09-13 6.7 - Reason 8
55293825 2012-05-04 6.9 - Reason 10
55293825 2012-06-17 1.2 - Reason 3
有什么办法可以做到吗?
【问题讨论】:
【参考方案1】:删除以 2 或 3 开头的行怎么样?
str_detect()
允许检测是否存在以 2 (^2
) 或 3 (^3
) 开头的字符串。
negate = TRUE
返回不匹配的元素。
library(tidyverse)
data %>%
dplyr::filter(str_detect(MOTIV, c("^2", "^3"), negate = TRUE))
【讨论】:
【参考方案2】:如果你想要所有个不匹配的行:
data %>% filter(!grepl("^3|^2", MOTIV))
1 55284765 2012-09-13 6.7 - Reason 8
2 55293825 2012-05-04 6.9 - Reason 10
3 55293825 2012-06-17 1.2 - Reason 3
如果您只想要任何匹配后的一行(它假设它也将不是匹配):
idx <- data %>%
mutate(i=grepl("^3|^2", MOTIV)) %>%
pull(i)
data[which(idx)+1,] %>%
drop_na()
1 55284765 2012-09-13 6.7 - Reason 8
2 55293825 2012-05-04 6.9 - Reason 10
【讨论】:
以上是关于如何在R中排列和选择以下行?的主要内容,如果未能解决你的问题,请参考以下文章