Создать новую строку, чтобы назначить M / F столбцу на основе заголовка со ссылкой на вторую таблицу? - PullRequest
0 голосов
/ 23 сентября 2019

Я новичок в R (и вообще кодирую) и действительно застрял в том, как решить эту проблему.

У меня очень большой набор данных;столбцы - это номер образца (~ 7000 образцов), а строки - экспрессия генов (~ 20000 генов).Заголовки столбцов: BIOPSY1-A, BIOPSY1-B, BIOPSY1-C, ..., BIOPSY200-Z.Каждое число (1-200) представляет собой отдельного пациента, и каждая выборка для этого пациента представляет собой отдельную букву (-A, -Z).

Я хотел бы сделать несколько сравнений между образцами, взятыми у мужчин иженщины.Пол не включен в эту таблицу экспрессии генов.У меня есть отдельный файл с номерами пациентов (BIOPSY1-200) и их пол M / F.

Я хотел бы закодировать что-то, что будет смотреть на идентификатор столбца (например: BIOPSY7-A), признать, что этовключает в себя «BIOPSY7» (но не == BIOPSY7, потому что есть от BIOPSY7-A до BIOPSY7-Z), найдите «BIOPSY7» в справочном файле, экстраполируйте M / F и создайте новую строку с обозначением M / F.

Честно говоря, я настолько перегружен кодированием, что попытался открыть файл в Excel, чтобы вручную ввести M / F для 7000 столбцов, поскольку это, вероятно, было бы быстрее.Однако файл настолько велик, что Excel открывается при его открытии.

Любые входные данные или ресурсы, которые позволят мне выбрать правильный путь, будут чрезвычайно полезны !!

1 Ответ

0 голосов
/ 23 сентября 2019

Я не совсем знаю, как выглядят ваши данные, поэтому я сделал свои на основе ваших определений.Я уверен, что вы можете изменить этот ответ в зависимости от ваших потребностей и структуры набора данных:

library(data.table)
genderfile <-data.frame("ID"=c("BIOPSY1", "BIOPSY2", "BIOPSY3", "BIOPSY4", "BIOPSY5"),"Gender"=c("F","M","M","F","M"))

#you can just read in your gender file to r with the line below
#genderfile <- read.csv("~/gender file.csv")
    View(genderfile)

enter image description here

df<-matrix(rnorm(45, mean=10, sd=5),nrow=3)
colnames(df)<-c("BIOPSY1-A", "BIOPSY1-B", "BIOPSY1-C", "BIOPSY2-A", "BIOPSY2-B", "BIOPSY2-C","BIOPSY3-A", "BIOPSY3-B", "BIOPSY3-C","BIOPSY4-A", "BIOPSY4-B", "BIOPSY4-C","BIOPSY5-A", "BIOPSY5-B", "BIOPSY5-C")
df<-cbind(Gene=seq(1:3),df)
df<-as.data.frame(df)
#you can just read in your main df to r with the line below, fread prevents dashes to turn to period in r, you need data.table package installed and checked in 
#df<-fread("~/first file.csv")
View(df)

enter image description here

Обратите внимание, что следующая строка кода удаляет тире и букву из имен столбцов df (я удалил первый столбец с помощью df [, - c (1)], потому что это идентификатор гена):

substr(x=names(df[,-c(1)]),start=1,stop=nchar(names(df[,-c(1)]))-2)
#[1] "BIOPSY1" "BIOPSY1" "BIOPSY1" "BIOPSY2" "BIOPSY2" "BIOPSY2" "BIOPSY3" "BIOPSY3" "BIOPSY3" "BIOPSY4" "BIOPSY4"
#[12] "BIOPSY4" "BIOPSY5" "BIOPSY5" "BIOPSY5"

Теперь мы готовы сопоставить столбцы df с идентификатором в гендерном файле, чтобы получить столбец Пол:

Gender<-genderfile[, "Gender"][match(substr(x=names(df[,-c(1)]),start=1,stop=nchar(names(df[,-c(1)]))-2), genderfile[,"ID"])]
Gender
 #[1] F F F M M M M M M F F F M M M

Последний шаг - добавить определенный полвыше в виде строки для df:

df_withGender<-rbind(c("Gender", as.character(Gender)), df)
View(df_withGender)

enter image description here

...