Как подмножить первый столбец (имена строк) в R

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

> setwd("C:/Users/Will/Desktop/BIOL3063/R code assignment");
> df = read.csv('R-assignments-dataset.csv', stringsAsFactors = FALSE);

Вот упрощенный пример набора данных, с которым я работаю, он имеет 270 столбцов (образцы тканей) и 7065 строк (названия генов).

Первый столбец представляет собой список названий генов (A2M, AAAS, AACS и т. д.), и каждый столбец представляет собой отдельный образец ткани, таким образом показывая экспрессию гена в каждом образце ткани.

Задается вопрос: «Отсортируйте имена генов в алфавитном порядке (A-Z) и распечатайте первые 20 имен генов».

Мой мыслительный процесс состоял бы в том, чтобы выделить подмножество первого столбца (имена генов), а затем выполнить order() для сортировки по алфавиту, после чего я могу использовать head() для печати первых 20.

Однако, когда я пытаюсь

> genes <- df[1]

Он просто подмножает первый столбец, содержащий данные (TCGA-A6-2672_TissueA), а не столбец слева.

Также

> genes <- df[,df$col1];
> genes;
data frame with 0 columns and 7065 rows
> order(genes);
integer(0)

Появляется, чтобы создать список имен генов в средстве просмотра R studio, но я не могу выполнить с ним какие-либо манипуляции.

Я не могу правильно найти первый столбец в data.frame, так как у него нет заголовка столбца, и у меня также есть такая же проблема, когда я делаю то же самое со строкой 1 (примеры имен).

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

Ура ребята

Так какой именно желаемый результат здесь? Вы пытаетесь извлечь значения, начинающиеся с «A2M|2»? Если у первого столбца нет заголовка, R будет считывать его как имена строк. Попробуйте посмотреть на rownames(df).

MrFlick 09.04.2019 17:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
2 324
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы спрашиваете то, что, как я думаю, вы спрашиваете, вам просто нужно подмножество внутри функции as.data.frame, которая автоматически сгенерирует «заголовок», как вы это называете. Она будет называться V1, первая переменная вашего нового фрейма данных.

genes <- as.data.frame(df[,1])
genes$V1
1 A
2 C
3 A
4 B
5 C
6 D
7 A
8 B

Согласно приведенному ниже комментарию, проблемы можно избежать, если вы удалите запятую из синтаксиса подмножества. Когда вы выбираете столбцы из data.frame, вам нужно индексировать только столбец, а не строки.

genes <- df[1]

Разница заключается в синтаксисе подмножества оригинального плаката. Если вы подмножествуете с помощью df[,1], вы возвращаете вектор (векторизованную версию первого столбца df). Если вы позвоните df[1], вы избежите этой проблемы. Я просто отвечаю на вопросы, как они были заданы.

Dij 09.04.2019 17:37

Проблема, с которой я сталкиваюсь, заключается в том, что обе эти строки кода genes <- as.data.frame(df[,1]) и genes <- df[1] подмножают столбец справа от столбца, который я собираюсь подмножить. Я намерен подмножить имена генов в первом столбце, а не числовые значения во втором столбце. Я отредактировал свой исходный пост для ясности, спасибо.

Will Finch 09.04.2019 18:50

Ах я вижу. Я изначально неправильно понял ваш вопрос. Вы хотите извлечь имена строк, используя функцию rownames

Dij 09.04.2019 20:21
Ответ принят как подходящий

Пожалуйста, включите образец вашего текстового файла в виде текста, а не изображения.


Я создал набор данных, похожий на ваш:

    X   Y
1   a   b
2   c   d
3   d   g

Обратите внимание, что столбцы тканей имеют заголовок, а названия генов — нет. Поэтому они будут интерпретироваться как имена строк, см. ?read.table:

If row.names is not specified and the header line has one less entry than the number of columns, the first column is taken to be the row names.

Читаю в R:

df <- read.table(text = '   X   Y
1   a   b
2   c   d
3   d   g')

Таким образом, ваши имена генов находятся не в df[1], а в rownames(df), поэтому, чтобы получить эти genes <- rownames(df) или добавить их в существующую df, вы можете использовать df$gene <- rownames(df)

Существует множество способов преобразовать имена ваших строк в столбцы, см., например, этот вопрос.

Спасибо! Проблема заключалась в том, что я не мог найти имена своих генов, поэтому использование genes <- rownames(df) дало результаты, которые я искал.

Will Finch 09.04.2019 19:26

Рад, что смог помочь, теперь вам нужно взглянуть на ?order, вот так: sorted.genes <- genes[order(genes)] и попасть в топ-20: top.20 <- head(sorted.genes, 20) @WillFinch

KingBoomie 09.04.2019 19:36

Другие вопросы по теме