我有一个非常大的数据集,我需要将我的数据集设置为子集,以便在药物50之前只保留任何药物列中包含单词"Flutter 热息痛"的ID,例如药物1、药物2、药物3等.

请帮帮忙<3

df <- data.frame(id = paste0("ID",1:10),
             Medication1= c("paracetamol", "ibuprofen", "opiate", "sertraline"),
             Medication2= c("Lipitor", "ketamine", "zoloft", "xanax"),
             Medication3= c("ibuprofen", "paracetamol", "Zocor", "Zestril"),
             other= LETTERS[1:10])

推荐答案

一个使用dplyr commands的潜在解决方案:

library(dplyr)

df <- data.frame(id = paste0("ID",1:4),
                 Medication1= c("paracetamol", "ibuprofen", "opiate", "sertraline"),
                 Medication2= c("Lipitor", "ketamine", "zoloft", "xanax"),
                 Medication3= c("ibuprofen", "paracetamol", "Zocor", "Zestril"),
                 other= c(LETTERS[1:3], "paracetamol"))
df
#>    id Medication1 Medication2 Medication3       other
#> 1 ID1 paracetamol     Lipitor   ibuprofen           A
#> 2 ID2   ibuprofen    ketamine paracetamol           B
#> 3 ID3      opiate      zoloft       Zocor           C
#> 4 ID4  sertraline       xanax     Zestril paracetamol

# only detect "paracetamol" in "Medication" columns
df %>%
  filter(if_any(.cols = starts_with("Medication"),
                .fns = ~grepl("paracetamol", .x)))
#>    id Medication1 Medication2 Medication3 other
#> 1 ID1 paracetamol     Lipitor   ibuprofen     A
#> 2 ID2   ibuprofen    ketamine paracetamol     B

创建于2023-03-10,共reprex v2.0.2


要获得带有"paraceamol"和"paraceamol"的行,您可以使用ignore.case = TRUE:

df %>%
  filter(if_any(.cols = starts_with("Medication"),
                .fns = ~grepl("paracetamol", .x, ignore.case = TRUE)))
#>    id Medication1 Medication2 Medication3 other
#> 1 ID1 paracetamol     Lipitor   ibuprofen     A
#> 2 ID2   ibuprofen    ketamine paracetamol     B

如果您想要具有相同有效成分但名称不同的行:

df %>%
  filter(if_any(.cols = starts_with("Medication"),
                .fns = ~grepl("paracetamol|Tylenol", .x, ignore.case = TRUE)))
#>    id Medication1 Medication2 Medication3 other
#> 1 ID1 paracetamol     Lipitor   ibuprofen     A
#> 2 ID2   ibuprofen    ketamine paracetamol     B

如果您有跨多行的ID(例如ID1),则情况会变得更复杂,但有一种 Select 是:

library(dplyr)
library(tidyr)
df2 <- data.frame(id = paste0("ID",c(1,2,1,3)),
                 Medication1= c("paracetamol", "ibuprofen", "opiate", "sertraline"),
                 Medication2= c("Lipitor", "ketamine", "zoloft", "xanax"),
                 Medication3= c("ibuprofen", "paracetamol", "Zocor", "Zestril"),
                 other= c(LETTERS[1:3], "paracetamol"))
df2
#>    id Medication1 Medication2 Medication3       other
#> 1 ID1 paracetamol     Lipitor   ibuprofen           A
#> 2 ID2   ibuprofen    ketamine paracetamol           B
#> 3 ID1      opiate      zoloft       Zocor           C
#> 4 ID3  sertraline       xanax     Zestril paracetamol

df2 %>%
  pivot_longer(starts_with("Medication"),
               names_to = "medications") %>%
  group_by(id) %>%
  filter(any(value == "paracetamol")) %>%
  pivot_wider(names_from = medications)
#> # A tibble: 3 × 5
#> # Groups:   id [2]
#>   id    other Medication1 Medication2 Medication3
#>   <chr> <chr> <chr>       <chr>       <chr>      
#> 1 ID1   A     paracetamol Lipitor     ibuprofen  
#> 2 ID2   B     ibuprofen   ketamine    paracetamol
#> 3 ID1   C     opiate      zoloft      Zocor

R相关问答推荐

如果R上的不同时期之间的值发生了变化,则创建假人

为什么t使用ifelse()基于两个DF中的匹配观察创建新列不适用于此数据?

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

R中的滞后累积量

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

将带有范围的字符串转换为R中的数字载体

以R中的正确顺序将日期时间字符列转换为posixct

如何得到R中唯一的组合群?

当月份额减go 当月份额

将多列合并为单独的名称—值对

在R中按行按列范围查找最大值的名称

LOF中的插图短文字幕

TreeNode打印 twig 并为其上色

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

计算直线上点到参考点的总距离

如何使这些react 表对象相互独立?

变长向量的矢量化和

使用geom_sf跨越日期线时的闭合边界

使用函数从R中的列中删除标高

如何用不同长度的向量填充列表?