Как создать двоичный вектор на основе N процентилей?

#r #dataframe #matrix

Вопрос:

Как создать двоичный вектор (названный как group ) для пациентов, у которых верхняя 25% экспрессия гена кодируется как 1, а все остальные пациенты кодируются как 0?

 > dput(head(dat, 20))
c(14.0217647549219, 4.38634192539018, 11.230612647966, 13.5882888840484, 
10.2699597878478, 8.09562488203986, 14.1224780341231, 10.4488388145038, 
12.2745444001468, 9.09203349810451, 14.3513862469323, 11.5782968747535, 
13.6411144041398, 9.79892114560863, 11.1019611651618, 12.5146158084875, 
12.643970834391, 1.09720624597437, 5.83979838350692, 11.1604484254692
)
 

Ответ №1:

Мы могли бы использовать quantile для создания группы

 dat$group <- with(dat,  (V1 >= quantile(V1, 0.75)))
dat$group
[1] 0 1 0 0 0 0 1 0
 

Обновить

Основываясь на комментариях, «дата» OP-это vector

 dat <-  c(14.0217647549219, 4.38634192539018, 11.230612647966, 13.5882888840484, 10.2699597878478, 8.09562488203986, 14.1224780341231, 10.4488388145038, 12.2745444001468, 9.09203349810451, 14.3513862469323, 11.5782968747535, 13.6411144041398, 9.79892114560863, 11.1019611651618, 12.5146158084875, 12.643970834391, 1.09720624597437, 5.83979838350692, 11.1604484254692 )
 

Таким образом, мы можем непосредственно применить quantile на объекте

 group <-  (dat >= quantile(dat, 0.75))
out <- data.frame(V1 = dat, group)
 

-уптут

  out
          V1 group
1  14.021765     1
2   4.386342     0
3  11.230613     0
4  13.588289     1
5  10.269960     0
6   8.095625     0
7  14.122478     1
8  10.448839     0
9  12.274544     0
10  9.092033     0
11 14.351386     1
12 11.578297     0
13 13.641114     1
14  9.798921     0
15 11.101961     0
16 12.514616     0
17 12.643971     0
18  1.097206     0
19  5.839798     0
20 11.160448     0
 

данные

 dat <- structure(list(V1 = c(4.124, 5.215, 1.368, 0.325, 0.368, 3.653, 
36.12, 0.124)), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8"))
 

Комментарии:

1. У меня большой набор данных. Как мне создать фрейм данных?

2. @melil Извините, я не понял вашего вопроса. Зачем вам нужно создавать фрейм данных? Вы уже привели пример, и код с quantile может работать с векторами, т. е. с извлеченными столбцами.

3. @melil Вы имели в виду, что у вас есть какой-то файл, и вы хотите прочитать данные? В этом вы можете использовать dat <- read.csv("yourfile.csv")

4. Извините за путаницу. Я имею в виду ту dat <- structure(...) часть вашего ответа.

5. @melil, который просто использует dput(dat) его, дает структуру данных, так что, если вы скопируете код в сообщении и выполните, у нас будет та же структура данных. Обычно, когда люди показывают свои данные (как вы показали), могут возникнуть некоторые проблемы, т. Е., возможно, ваши столбцы данных имеют разные типы, и какой-то код не будет работать. С dput помощью , либо вы, либо я, либо кто угодно может использовать одни и те же данные с одинаковой структурой классов