首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从具有因子的变量中生成子集或范畴变量

如何从具有因子的变量中生成子集或范畴变量
EN

Stack Overflow用户
提问于 2020-03-17 14:03:18
回答 2查看 49关注 0票数 0

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

代码语言:javascript
运行
复制
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开始,然后把他们排除在我的数据框架之外。例如,我希望跟随某种输出。

代码语言:javascript
运行
复制
Blood_Cancer_Part<-c(1,2)
Part_without_Blood_cancer<-c(3,4,5,6,7)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-17 14:17:22

在基本R中,我们可以使用subset

代码语言:javascript
运行
复制
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

数据

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2020-03-17 14:15:08

下面是一种使用stringr包检查给定文本中的第一个字母的方法,从而从已经存在的Part列中创建一个列。

代码语言:javascript
运行
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60723942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档