【问题标题】:Selecting Rows in a Column Contingent on Two Variables in R根据 R 中的两个变量选择列中的行
【发布时间】:2017-07-25 17:01:29
【问题描述】:

我正在使用一个数据集,该数据集包含针对患者正在服用的每个处方的多个观察结果,其中包含许多不同的患者。患者通常服用几种药物中的一种,这些药物被表示为他们自己的二元变量,Drug1Drug2 等等。

我试图仅提取从一种药物转换为另一种药物的个体,即在 Drug1 列和 Drug2 中具有 1,但这些出现在不同的行中。

我曾尝试使用newdata <- mydata[which(Drug1 == 1 & Drug2 == 1),],但是,这假定1 位于同一行,但事实并非如此。

有没有办法选择同时接受这两种药物的患者,但指标变量在不同的行?

谢谢

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我相信这是您使用 dplyr 提出的问题的解决方案。

    data <- data.frame(id = rep(c(1, 2, 3, 4), each = 2),
                   drug1 = c(1, 0, 0, 0, 0, 1, 1, 1),
                   drug2 = c(0, 1, 1, 1, 1, 0, 0, 0)
                   )
    library(dplyr)
    data %>%
      group_by(id) %>%
      mutate(both_drugs = ifelse(any(drug1 == 1)  & any(drug2 == 1), 1, 0)) %>%
      filter(both_drugs == 1)
    

    【讨论】:

    • 不需要变异,可以filter(any(yada) &amp;&amp; any(bada))
    • 我同意,变异可用于验证结果是否符合您的要求。
    • 这会找到服用过两种药物的人,但问题是服用过一种药物然后换用另一种药物的人。如果他们同时服用两种药物,可能不算数。
    • 谢谢你们!这很有帮助。
    【解决方案2】:

    尝试为每种药物创建一个变量,以表明它是否是该人当时服用的唯一药物。

    data <- data.frame(id = rep(c(1, 2, 3, 4), each = 3),
                       drug1 = c(1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0),
                       drug2 = c(0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0))
    
    library(dplyr)
    
    data %>%
      group_by(id) %>%
      mutate(drug1only = ifelse(drug1==1 & drug2==0, 1, 0),
             drug2only = ifelse(drug2==1 & drug1==0, 1, 0)) %>%
      summarise(
        drug_switch = ifelse(max(drug1only)+max(drug2only)==2,1,0))
    

    【讨论】:

    • 它与 Brandon LeBeau 发布的内容不同。如果您想要服用两种药物的人,无论他们是否同时服用,那么布兰登的答案似乎是正确的。我的回答让你知道同时服用这两种药物的人,但前提是他们在不同时间服用。
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多