代码之家  ›  专栏  ›  技术社区  ›  neuron

如何有效地编辑海量数据

  •  1
  • neuron  · 技术社区  · 6 年前

    这里是一个示例数据集。让我向大家展示我对我的数据所做的一切,然后我将解释我所面临的困难。如果标题描述不准确,我深表歉意。我尽了最大努力,但我在这方面有点新。如果需要的话,可以把它换成更适合的衣服。

    Location sample1 sample 2 sample 3
    chr1:1234 0/1 1/1 0/0
    chr2:5678 0/0 0/0 0/0
    chr3:2345 1/1 1/1 1/1
    chr4:6789 0/1 1/1 ./.
    

    我用这个把它们转换成是,否,或者也许

    replacement<-function(x){
      x=replace(x,which(x=='./.'),0.1) 
      x=replace(x,which(x=='0/0'),0)
      x=replace(x,which(x=='0/1'),1)
      x=replace(x,which(x=='1/1'),2)
    }
    
    test=apply(test.data.set,2,replacement)
    
    test.data.2 <- as.data.frame(test)
    
    replacement<-function(x){
      x=replace(x,which(x=='0.1'), "MAYBE") 
      x=replace(x,which(x=='0'), "NO")
      x=replace(x,which(x=='1'), "YES")
      x=replace(x,which(x=='2'), "YES")
    }
    
    test.data.3=apply(test.data.2,2,replacement)
    
    test.data.4 <- as.data.frame(test.data.3)
    

    运行后的数据集

    Location sample1 sample 2 sample 3
    chr1:1234 YES YES NO
    chr2:5678 NO NO NO
    chr3:2345 YES YES YES
    chr4:6789 YES YES MAYBE
    

    所以我上面写的东西现在对我有用。但是,我有一个新的数据集,它包含大约300个样本(列)和大约..我甚至不确定,很容易就有5亿行,所以我需要改变超过10亿个“细胞”。我试着在一个有256G内存的集群上运行这个,但它只是超时了。我知道我上面所写的远远不是修改数据的“最平滑”方式。是否有人建议简化这一流程?我觉得DPLYR必须有某种方法来做到这一点。

    任何帮助都将是惊人的!如果您需要澄清,请随时提出任何问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   prosoitos CodeHunter    6 年前
    library(tidyverse)
    

    重新创建数据:

    df <- tibble(
      Location = letters[1:4],
      sample1 = c("0/1", "0/0", "1/1", "0/1"),
      sample2 = c("1/1", "0/0", "1/1", "1/1"),
      sample3 = c("0/0", "0/0", "1/1", "./.")
    )
    

    代码:

    df %>% mutate_at(
      vars(- Location),
      funs(case_when(
        . == "1/1" | . == "0/1" ~ "YES",
        . == "0/0" ~ "NO",
        . == "./." ~ "MAYBE"
      ))
    )
    

    结果:

    # A tibble: 4 x 4
      Location sample1 sample2 sample3
      <chr>    <chr>   <chr>   <chr>  
    1 a        YES     YES     NO     
    2 b        NO      NO      NO     
    3 c        YES     YES     YES    
    4 d        YES     YES     MAYBE