【问题标题】:How to make a subset or categorical variable from a Variable having factors如何从具有因子的变量中生成子集或分类变量
【发布时间】:2020-03-17 14:03:18
【问题描述】:

我正在处理一个大型数据集。我在数据框中有变量例如调用。

Part<-c(1,2,3,4,5,6,7)
Disease_codes>- c(A100,A145,B165,B187,B102,C132,D156)
df<-data.frame(Part,Disease_codes)

实际上,我想将所有从“A”开始的疾病代码归类为“血癌”。从字母 A 开始的疾病代码(例如 A100、A145)是血癌。因为我需要将患有血癌的参与者排除在我的研究之外。当然,我不能手动执行此操作,因为我有大量参与者。那么,我怎样才能使具有以 A 开头的疾病代码的人的子集,然后将它们从我的数据框中排除。例如,我想要以下输出。

Blood_Cancer_Part<-c(1,2)
Part_without_Blood_cancer<-c(3,4,5,6,7)

【问题讨论】:

标签: r bioinformatics


【解决方案1】:

在base R中,我们可以使用subset

BloodCancer <- subset(df, grepl('^A', Disease_codes), select = Part)
#OR
#BloodCancer <- subset(df, startsWith(Disease_codes, "A"))
BloodCancer

#  Part
#1    1
#2    2


Part_without_Blood_cancer <- subset(df, !grepl('^A', Disease_codes))
#OR
#Part_without_Blood_cancer <- subset(df, !startsWith(Disease_codes, "A"))
Part_without_Blood_cancer

#  Part
#3    3
#4    4
#5    5
#6    6
#7    7

数据

Part<-c(1,2,3,4,5,6,7)
Disease_codes <- c("A100","A145","B165","B187","B102","C132","D156")
df<-data.frame(Part,Disease_codes, stringsAsFactors = FALSE)

【讨论】:

  • 谢谢。但是我怎样才能从我的 df 中减去 Blood_Cancer(参与者)。如何获得以下输出。 df_BC 部分疾病代码 3 B165 4 B187 5 B102 6 C132
  • @Aryh 那不是Part_without_Blood_cancer 吗?或者你可以使用subset(df, !Part %in% BloodCancer$Part)
  • 如果所有具有疾病代码 A100-A180 的参与者都被包括为 BloodCancer,你能帮我制作一个 BloodCancer 的子集吗?以下不起作用 Part_without_Blood_cancer
  • 您可能应该为此提出一个新问题,但您可以尝试subset(df, Disease_codes %in% paste0('A', 100:180))
【解决方案2】:

这是一种方法,您可以使用 stringr 包检查给定文本中的第一个字母,并相应地从已经存在的 Part 列创建一个列。

library(stringr)
library(dplyr)

# Creating the dataframe
Part <- c(1,2,3,4,5,6,7)
Disease_codes <- c("A100","A145","B165","B187","B102","C132","D156")
df <- data.frame(Part, Disease_codes)

df <-
  df %>%
  # If first letter of Disease_codes contains A then create column from value of Part
  mutate(Blood_Cancer_Part = ifelse(str_sub(Disease_codes, 1, 1) == "A", Part, NA_character_),
         # If first letter of Disease_codes does not contains A then 
         # create column from value of Part
         Part_without_Blood_cancer = ifelse(str_sub(Disease_codes, 1, 1) != "A", Part, 
                                            NA_character_))

# To view as vectors
df$Blood_Cancer_Part[!is.na(df$Blood_Cancer_Part)]
# [1] "1" "2"

df$Part_without_Blood_cancer[!is.na(df$Part_without_Blood_cancer)]
# [1] "3" "4" "5" "6" "7"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2015-07-20
    相关资源
    最近更新 更多