Я не уверен, что название достаточно ясно.У меня есть датафрейм (см. Ниже), который содержит значения в 5 столбцах.Я хотел бы «разбить» этот фрейм данных на три класса, где строки могут быть назначены в состояние «High», «Medium», «Low».
Что я имею в виду:
Высокий: значения «высокие» как минимум в 3 столбцах
Средний: значения «средний» как минимум в 3 столбцах
Низкий: значения «Низкие»(или NA
) как минимум в 3 столбцах
Я предполагаю, что это включает в себя две вещи: определение значения отсечения для 3 групп, затем распределение строк по категориям High, Medium и Low ... но это предположение
Файл данных доступен здесь
tmp = read.table("tmp2.txt", header=TRUE)
head(tmp)
Geneid Hsap Mmul Mmus Rnor Cfam
1 ENSG00000197711 365823.5 243429.20 44337.267 156874.50 128015.0
2 ENSG00000198712 198613.0 NA 47767.767 200176.50 210559.8
3 ENSG00000198899 189421.5 NA NA 283425.50 367112.8
4 ENSG00000198804 182559.5 NA 87301.900 277861.00 324438.0
5 ENSG00000198840 142424.5 NA 8400.457 45844.80 115027.9
6 ENSG00000171564 119147.9 93564.66 6675.290 45938.85 45140.2
Любые советы очень ценятся, поскольку у меня нет ни малейшего представления о том, как с этим справиться!
Спасибо,
Ответ ниже:
Теперь я заменил файл более реалистичным (больше строк)
tbl <- read.csv("http://db.tt/L2ehGh8", header=FALSE)
colnames(tbl) <- c("Geneid","Hsap","Mmul","Mmus","Rnor","Cfam")
Использование cut()
: у меня много нулей, а значения растягиваются тихо, поэтому с помощью log
или здесь asinh
вы избавитесь от этого.
tbl.data <- apply(asinh(tbl.data),2,
function(x) as.numeric(as.factor(cut(x,4))) )
head(tbl.data)
Hsap Mmul Mmus Rnor Cfam
[1,] 2 2 1 1 2
[2,] 2 2 2 2 2
[3,] 1 1 1 1 1
[4,] 1 1 1 1 1
[5,] 2 3 2 2 3
[6,] 2 2 2 2 2
Другой способ - использовать квантили, которые, как мне показывали,
quantile(tbl.data[,1],0.25)
quantile(tbl.data[,1],0.5)
quantile(tbl.data[,1],0.75)
tbl.data2 <- apply(tbl.data,2,
function(x) as.numeric(as.factor(cut(x,c(-1,
quantile(x, 0.25)+0.0001,
quantile(x,0.5),
quantile(x,0.75), max(x))))))
head(tbl.data2)
Hsap Mmul Mmus Rnor Cfam
[1,] 3 3 3 2 3
[2,] 2 3 4 3 3
[3,] 2 1 1 1 2
[4,] 1 2 1 1 1
[5,] 4 4 4 4 4
[6,] 3 4 4 3 4