В настоящее время я пытаюсь запустить PCA на некоторых данных log2cpm из RNA-expression. Я сделал следующую предварительную обработку данных:
- Загрузить набор данных моего выражения
- Отфильтрованы гены на основе набора генов (список оценок), которые я хочу исследовать дальше.
Набор данных для контроля и лечения:
dataset <- read.table("log2cpm.txt", sep="\t", header = TRUE, row.names = NULL) %>% na.omit()#dataset
dataset <- dataset[!duplicated(dataset$hgnc_symbol), ]
row.names(dataset) <- dataset$hgnc_symbol
#Set genedabase
gene_DB <- read.table("TableS1.txt", sep="\t", header = TRUE) #selection
gene_DB <- gene_DB[!duplicated(gene_DB$Symbol), ]
row.names(gene_DB) <- gene_DB$Symbol
Затем я отфильтровал гены:
#Filter genes from dataset based on imported database
dataset_filtered <- dataset %>% filter(hgnc_symbol %in% gene_DB$Symbol)
Далее я транспонировал (перевернул) кадр данных и преобразовал его в матрицу:
data_tsc <- t(as.matrix(dataset_filtered))
colnames(data_tsc) <- c(data_tsc[2,1:ncol(data_tsc)])
data_tsc <- data_tsc[c(-1,-2),]
Вы можете видеть в коде, что я всегда стараюсь сохранить имена строк (образец) и col_names (гены), чтобы я мог иметь некоторый смысл из PCA и данных при их обработке, а также отслеживать 300+ гены.
Это, однако, не работает, когда я запускаю матрицу (data_tsc) через анализ PCA:
#Run PCA####
pca <- prcomp(data_tsc[,c(1:ncol(data_tsc))], center = TRUE,scale. = TRUE)
Возвращает:
Ошибка в colMeans (x, na.rm = TRUE): «x» должно быть числовым
После энергичного поиска в Google я обнаружил проблему: as.matrix
и t()
, сделанные ранее, превращают числовые значения в chr
.
Я пытался исправить это множество раз с помощью таких функций, как: apply, lapply, as.numeric и т. Д. И т. П. нарушить весь набор данных.
Так есть ли простое и быстрое решение для преобразования значений chr в числовые значения, при этом сохраняя мои строки и столбцы? Было бы очень признательно: D
Ps. Я только учусь кодированию, но сталкиваюсь с некоторыми проблемами.
ИЗМЕНЕНИЯ:
NelsonGon попросил меня предоставить следующие данные:
dput(head(data_tsc))
Который вернул
structure(c("4,891962697", "4,807689723", "5,07457417", "5,086369154",
"4,914961379", "4,83431453", "6,583923027", "6,482957338", "6,587420199",
"6,532262901", "6,438933039", "6,448834899", "2,832721409", "2,881398092",
"2,389231753", "2,780670224", "2,417835957", "2,761576388", "7,494008371",
"7,58143903", "7,62969704", "7,579694323", "7,438227488", "7,513190279",
"6,257073157", "6,351044394", "6,313216639", "6,597298125", "6,112566161",
"6,315617767", "6,822914122", "6,660904066", "6,925653718", "7,379973187",
"6,804033651", "6,443382931", "5,271577287", "5,510134745", "5,418971124",
"5,551120518", "5,302474278", "5,552416478", "5,165993558", "5,030291607",
"5,145076323", "4,905049925", "5,202651513", "5,250135996", "2,827019018",
"2,626020468", "2,702723667", "2,575260635", "2,30347029", "2,449794083",
"5,866824758", "5,881522359", "5,913145862", "5,922174742", "5,869024665",
"5,896680873"), .Dim = c(6L, 10L), .Dimnames = list(c("LIG_UT_1",
"LIG_UT_2", "LIG_UT_3", "LIG_UT_4", "LIG_UT_5", "LIG_UT_6"),
c("ACVR1", "ADAM17", "AGER", "AKT1", "ANPEP", "ANXA1", "AR",
"ATM", "AURKA", "AXIN1")))
Изменения после второго предложения :
Я изменил это в read.table ()
dataset <- read.table("log2cpm.txt", sep="\t", header = TRUE, row.names = NULL, dec = ",")
Specifing dec = ","
Это дало следующий вывод в dput:
structure(c(" 4.8919627", " 4.8076897", " 5.0745742", " 5.0863692",
"4.9149614", "4.8343145", "6.5839230", "6.4829573", "6.5874202",
"6.5322629", "6.4389330", "6.4488349", "2.8327214", "2.8813981",
"2.3892318", "2.7806702", "2.4178360", "2.7615764", "7.4940084",
«7.5814390», «7.6296970», «7.5796943», «7.4382275», «7.5131903»,
«6.2570732», «6.3510444», «6.3132166», «6.5972981», «6.1125662»,
«6.3156178», «6.8229141», «6.6609041», «6.9256537», «7.3799732»,
«6.8040337», «6.4433829», «5.2715773», «5.5101347», «5.4189711»,
«5.5511205», «5.3024743», «5.5524165», «5.1659936», «5.0302916»,
«5.1450763», «4.9050499», «5.2026515», «5.2501360», «2.8270190»,
"2.6260205", "2.7027237", "2.5752606", "2.3034703", "2.4497941",
"5.8668248", "5.8815224", "5.9131459", "5.9221747", "5.8690247",
"5.8966809"), .Dim = c (6L, 10L), .Dimnames = list (c ("LIG_UT_1",
"LIG_UT_2", "LIG_UT_3", "LIG_UT_4", "LIG_UT_5", "LIG_UT_6"),
c ("ACVR1", "ADAM17", "AGER", "AKT1", "ANPEP", "ANXA1", "AR",
"Банкомат", "AURKA", "AXIN1")))
Решение
Based on Adams suggestion prrevious suggestion to add dec = "," in read.table, and to afterwards use use the following code:
dataset_numeric <- apply(data_tsc, 2, as.numeric)
rownames(data_numeric) <- rownames(data_tsc)
colMeans(data_tsc)
Мне удалось преобразовать значения символов в числовые, сохранив при этом строки и столбцы. Спс работал, а:
is.numeric(dataset_numeric)
[1] ИСТИНА
Спасибо за все, что помогли мне, я собирался оторвать свои волосы в отчаянии.