如何为每一列过滤行

问题描述 投票:0回答:1

我有一个大数据框(data.txt)。第一列是基因的名称,其他列是样本。此df的示例:

enter image description here

我跟踪了这​​篇文章:

How to filter rows for every column independently using 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)

如果您还有其他想法,欢迎您!谢谢

r filter tidyverse
1个回答
1
投票

要基于列值创建子集,您可以基于基因值创建一个temp_field:<0,== 0和> 0。然后拆分基础库的数据框使用拆分功能

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)

由于我没有要测试的数据,因此上面的函数可能存在语法错误,但是在逻辑上应该是正确的。

让我知道,是否可以解决您的问题。

您还可以参考link,在拆分和合并数据帧上。

© www.soinside.com 2019 - 2024. All rights reserved.