我有一个大数据框(data.txt)。第一列是基因的名称,其他列是样本。此df的示例:
我跟踪了这篇文章:
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)
如果您还有其他想法,欢迎您!谢谢
要基于列值创建子集,您可以基于基因值创建一个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,在拆分和合并数据帧上。