Как фильтровать строки для каждого столбца - PullRequest
0 голосов
/ 15 апреля 2020

У меня большой фрейм данных ( data.txt ). Первый столбец - это название генов, а остальные столбец - Образец. Пример этого df:

enter image description here

Я подписался на этот пост:

Как фильтровать строки для каждого столбца независимо используя dplyr

Потому что это именно то, что я ищу. Я хочу создать 3 подмножества в зависимости от значения гена. Одно подмножество для значений: <0, == 0 и> 0.

Но я получаю эту ошибку:

Error: Each row of output must be identified by a unique combination of keys. Keys are shared for 448    rows: * 45317, 50187 * 64477, 65535 * 146028, 148040

Я использовал этот код:

Data <- read.table("data_CNA.txt",sep="\t", header=TRUE)
library(tidyverse)
gain <- Data %>% gather(name, value, -Hugo_Symbol) %>% filter(value >= 1) %>% spread(name, value)

Если у вас есть какая-либо идея лучше, чем эта, добро пожаловать! Спасибо

1 Ответ

1 голос
/ 15 апреля 2020

Чтобы создать подмножества на основе значения столбца, вы можете создать поле temp_field на основе значений гена: <0, == 0 и> 0 . а затем split фрейм данных с использованием функции разделения базовой библиотеки.

df_list <- Data %>% rownames_to_column(var = "Id") %>% 
  gather(name, value, -c(Hugo_Symbol,Id)) %>%
  mutate(temp_field = case_when(value < 0 ~ "loss",
                                value > 0 ~ "gain",
                                T ~ "neutral"),
         temp_field = as.factor(temp_field)
  ) %>% split(., .$temp_field)

spread_df_func <- function(df){
  d <- df %>% select(Id,Hugo_Symbol, name, value) %>% spread(key = name, value = value)
  return(d)
}

org_df_list <- df_list %>% map(spread_df_func)

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

Дайте мне знать, если это решит вашу проблему.

Вы также можете обратиться к ссылка , на разделить и объединить данные кадр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...