Как сделать подмножество или категориальную переменную из переменной, имеющей факторы - PullRequest
0 голосов
/ 17 марта 2020

Я работаю над большим набором данных. У меня есть переменная во фрейме данных. Например, называется.

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 (например, A100, A145), обозначают рак крови. Потому что мне нужно исключить участников, имеющих рак крови, из моих исследований. Конечно, я не могу делать это вручную, потому что у меня огромное количество участников. Так, как я могу сделать подмножество людей, у которых есть коды болезней, начинающиеся с A, и затем исключить их из моего фрейма данных. Например, я хочу следующий вид ставок.

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

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

В базе 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

data

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 голосов
/ 17 марта 2020

Вот способ, с помощью которого вы можете сделать это с помощью пакета 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...