如何在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中排列和选择以下行?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算R中的组合和排列?

在 Pandas 中读取、选择和重新排列列

r通过ID [duplicate]重新排列行

使用 R 中的 Formattable 包按行排列条件

如何重新排列R中的单个细胞?

谁能告诉我excel表格中如何将数字按奇数和偶数依次排列