【问题标题】:Subset of list in Dataframe R in categorical variable分类变量中 Dataframe R 中列表的子集
【发布时间】:2020-04-23 16:05:18
【问题描述】:

我的数据看起来像这样,但观察次数约为 10000。

Part<-c(1,2,3,4,5,6,7)
Disease_codes>-c("A101.12","A111.12","A121.13","A130.0","B102","C132","D156")
class(Disease_codes)<-Factor

df<-data.frame(Part,Disease_codes)

具有从A10_A13 开始的Disease_codes 的obs 是BloodCancer 患者。我需要制作它的子集,我正在尝试关注

BloodCancer <- subset(df, grepl('^A10', Disease_codes), select = Part

Part_without_Blood_cancer <- subset(df, !grepl('^A10', Disease_codes)) 

如果我正在尝试以下操作,则无法正常工作。

BloodCancer <- subset(df, grepl('^A10-A13', Disease_codes), select = Part

但它只给了我包含参与者的 A10 编码,但我希望 BloodCancer 变量包含来自 A10-A13 的所有内容。我怎样才能在一个命令中做到这一点。

【问题讨论】:

    标签: r dataframe dplyr purrr


    【解决方案1】:

    grepl 对任何字符串(例如 A10、A11)返回 true 的语法如下: grepl(“A10 | A11”,变量)。要将其保留为一个语句,您可以执行以下操作:

    BloodCancer = subset(df, grepl(paste(paste("A1", 0:3, sep = ""), collapse = "|"), Disease_codes), select = Part)
    

    【讨论】:

    • 我不希望 A14 包含在 BloodCancer 中。上面的命令会只包含 A10 到 A13 吗?
    • 是的,前提是该字母只能位于代码的开头(例如,不能有 A14.0A10,因为您使用的是 grepl,所以我认为是这样)。然后它查找包含 A10 或 A11 或 A12 或 A13 的任何字符串,这是通过在第一个子括号中粘贴 A1 和 0、1、2、3 来完成的
    • 欢迎您!之前看到关于 select 的评论 - 我编辑了答案以包含 select if any(grepl 周围还有一对额外的括号),但它与您最初拥有它的地方相同:)
    【解决方案2】:

    试着这样做

    BloodCancer <- subset(df, grepl("^A1[0-3]", as.character(Disease_codes)), select = Part)
    

    【讨论】:

      【解决方案3】:

      dplyr 的选项

      library(dplyr)
      library(stringr)
      df %>%
        filter(str_detect(Disease_codes, "^A1[0-3]")) %>%
        select(Part)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-27
        • 2019-12-16
        • 2022-01-01
        • 2013-10-07
        • 2017-09-03
        • 2015-07-04
        • 1970-01-01
        • 2012-07-24
        相关资源
        最近更新 更多