【问题标题】:Is there a way to stop read.csv from sorting my lines?有没有办法阻止 read.csv 对我的行进行排序?
【发布时间】:2020-11-14 15:52:34
【问题描述】:

我正在尝试绘制我选择的数据,但似乎 read.csv 将它们排序出来或者可能是 dplyr,但我想以我放置它们的方式绘制选定的名称。有没有办法做到这一点?

这些是我的数据和代码:


dfc <- read.csv(url("https://github.com/learnseq/learning/raw/main/GSE133399_Fig2_FPKM.csv"))

dfg <- dfc %>% dplyr::filter(tracking_id %in% c('S100a10', 'Esm1', 'Itgb1', 'Anxa2', 'Hist1h1b', 
                                                'Il2rb', 'Lgals1', 'Mki67', 'Rora', 'S100a4', 
                                                'S100a6', 'Adam8', 'Areg', 'Bcl2l1', 'Calca', 
                                                'Capg', 'Ccr2', 'Cd44', 'Csda', 'Ehd1', 
                                                'Id2', 'Il10', 'Il1rl1', 'Il2ra', 'Lmna', 
                                                'Maf', 'Penk', 'Podnl1', 'Tiam1', 'Vim',
                                                'Ern1', 'Furin', 'Ifng', 'Igfbp7', 'Il13', 
                                                'Il4', 'Il5', 'Nrp1', 'Ptprs', 'Rbpj', 
                                                'Spry1', 'Tnfsf11', 'Vdr', 'Xcl1', 'Bmpr2', 
                                                'Csf1', 'Dst', 'Foxp3', 'Itgav', 'Itgb8', 
                                                'Lamc1', 'Myo1e', 'Pmaip1', 'Prdm1', 'Ptpn5', 
                                                'Ramp1', 'Sdc4')) 
head(dfg)

我希望在这个link 中找到解决方案,但没有运气。

【问题讨论】:

    标签: r


    【解决方案1】:

    %in% 将根据数据在数据框中的存在方式而不是根据您过滤的向量对数据进行子集化。如果您想要相同的订单,您可以使用match

    library(dplyr)
    dfc %>% slice(match(values, tracking_id))
    

    在基础 R 中可以写成:

    dfc[match(values, dfc$tracking_id), ]
    

    values 在哪里:

    values <- c('S100a10', 'Esm1', 'Itgb1', 'Anxa2', 'Hist1h1b', 
                'Il2rb', 'Lgals1', 'Mki67', 'Rora', 'S100a4', 
                'S100a6', 'Adam8', 'Areg', 'Bcl2l1', 'Calca', 
                'Capg', 'Ccr2', 'Cd44', 'Csda', 'Ehd1', 
                'Id2', 'Il10', 'Il1rl1', 'Il2ra', 'Lmna', 
                'Maf', 'Penk', 'Podnl1', 'Tiam1', 'Vim',
                'Ern1', 'Furin', 'Ifng', 'Igfbp7', 'Il13', 
                'Il4', 'Il5', 'Nrp1', 'Ptprs', 'Rbpj', 
                'Spry1', 'Tnfsf11', 'Vdr', 'Xcl1', 'Bmpr2', 
                'Csf1', 'Dst', 'Foxp3', 'Itgav', 'Itgb8', 
                'Lamc1', 'Myo1e', 'Pmaip1', 'Prdm1', 'Ptpn5', 
                'Ramp1', 'Sdc4')
    

    【讨论】:

    • 谢谢@RonakShah!它有效,如何使用dfc[match(values, dfc$tracking_id), ] 反转相同值的顺序?
    • 反转值。 dfc[match(rev(values), dfc$tracking_id), ]
    【解决方案2】:

    一种方法是将变量转换为具有所需顺序的水平因子。之后您可以相应地安排您的数据:

    library(dplyr)
    
    dfc <- read.csv(url("https://github.com/learnseq/learning/raw/main/GSE133399_Fig2_FPKM.csv"))
    
    ids <- c('S100a10', 'Esm1', 'Itgb1', 'Anxa2', 'Hist1h1b', 
             'Il2rb', 'Lgals1', 'Mki67', 'Rora', 'S100a4', 
             'S100a6', 'Adam8', 'Areg', 'Bcl2l1', 'Calca', 
             'Capg', 'Ccr2', 'Cd44', 'Csda', 'Ehd1', 
             'Id2', 'Il10', 'Il1rl1', 'Il2ra', 'Lmna', 
             'Maf', 'Penk', 'Podnl1', 'Tiam1', 'Vim',
             'Ern1', 'Furin', 'Ifng', 'Igfbp7', 'Il13', 
             'Il4', 'Il5', 'Nrp1', 'Ptprs', 'Rbpj', 
             'Spry1', 'Tnfsf11', 'Vdr', 'Xcl1', 'Bmpr2', 
             'Csf1', 'Dst', 'Foxp3', 'Itgav', 'Itgb8', 
             'Lamc1', 'Myo1e', 'Pmaip1', 'Prdm1', 'Ptpn5', 
             'Ramp1', 'Sdc4')
    
    dfg <- dfc %>% 
      filter(tracking_id %in% ids) %>% 
      mutate(tracking_id = factor(tracking_id, levels = ids)) %>% 
      arrange(tracking_id)
    head(dfg)
    #>   tracking_id CD44low_rep1 CD44hi_CD69low_rep1 CD44hi_CD69hi_CD103low_rep1
    #> 1     S100a10    24.185300            215.9770                   191.19900
    #> 2        Esm1     0.292527             11.6737                     1.31048
    #> 3       Itgb1     2.783530             75.2682                    76.31740
    #> 4       Anxa2     0.771864             20.1817                    23.60150
    #> 5    Hist1h1b     1.784150             47.6620                    24.46870
    #> 6       Il2rb     1.309430             25.4487                    57.04810
    #>   CD44hi_CD69hi_CD103hi_rep1 CD44low_rep2 CD44hi_CD69low_rep2
    #> 1                 221.072000   25.8888000            216.7610
    #> 2                   0.989497    0.0556449             11.3918
    #> 3                  11.118500    2.8061500             61.1956
    #> 4                  13.964600    0.4517920             20.5154
    #> 5                  64.651200    0.6789370             51.1621
    #> 6                  60.663400    1.1446900             23.3560
    #>   CD44hi_CD69hi_CD103low_rep2 CD44hi_CD69hi_CD103hi_rep2
    #> 1                   201.88600                  213.88400
    #> 2                     2.08267                    1.25273
    #> 3                    57.41610                    9.42745
    #> 4                    21.44850                   11.18830
    #> 5                    40.79160                   43.77030
    #> 6                    65.39240                   50.75980
    

    【讨论】:

    • 谢谢@stefan!但我不确定是否要将它们转换为因子,因为我不确定它是否会影响流处理
    • 排列后可以转回字符,即加mutate(tracking_id = as.character(tracking_id))。但是,总体而言,@RonakShah 的答案绝对是获得所需结果的更简单的解决方案。
    • 你的也很棒@stefan,感谢你的支持,以后我会试试的。我只是调试速度很慢,当有问题时我必须逐行检查,这很耗时,但学习新东西总是好的。你能看看这个我需要帮助的问题吗stackoverflow.com/questions/64826379/…
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多