如何避免在创建数据帧期间生成NA

时间:2015-02-14 12:10:02

标签: r

我有一些数据文件,我从这些文件中生成数据数据框,如下所示:

                                           V1 V2   V3   V4   V5   V6   V7
1                                          bb  A <NA> <NA>    P <NA>    M
2              chemokine (C-C motif) ligand 5  P <NA> <NA> <NA> <NA> <NA>
3 discoidin domain receptor tyrosine kinase 1  M <NA>   A  <NA> <NA>    P
4        heat shock 70kDa protein 6 (HSP70B')  A <NA> <NA> <NA> <NA> <NA>
5                                paired box 8  P    P    P <NA>    P <NA>
6 replication factor C (activator 1) 2, 40kDa  P <NA> <NA> <NA> <NA> <NA>
7 ubiquitin-like modifier activating enzyme 7  P <NA> <NA>    P <NA>    P

在生成数据框架V3期间,它会创建我不想生成的NA's。我知道我可以通过data[!is.na(data)]删除它们但我希望有一个控件。我想知道有没有办法做到这一点。

第二件事是我想按(V1)的顺序排列没有第一列P , A , M的行。我知道我可以按升序或降序排序,但我想要上面说的订单模式。怎么做。提前谢谢。

编辑:预期输出

                                           V1 V2   V3   V4   V5   V6   V7
1                                          bb  P    A    M  <NA>  <NA> <NA>
2              chemokine (C-C motif) ligand 5  P  <NA> <NA> <NA> <NA>  <NA>
3 discoidin domain receptor tyrosine kinase 1  P    A    M  <NA> <NA>  <NA>   
4        heat shock 70kDa protein 6 (HSP70B')  A  <NA> <NA> <NA> <NA>  <NA>
5                                paired box 8  P    P    P    P  <NA>  <NA>
6 replication factor C (activator 1) 2, 40kDa  P  <NA> <NA> <NA> <NA>  <NA>
7 ubiquitin-like modifier activating enzyme 7  P    P    P  <NA> <NA>  <NA> 

示例:在第一次迭代中,我得到这样的

                                           V1 V2    
1                                          bb  P     
2              chemokine (C-C motif) ligand 5  P   
3 discoidin domain receptor tyrosine kinase 1  P        
4        heat shock 70kDa protein 6 (HSP70B')  A   
5                                paired box 8  P     
6 replication factor C (activator 1) 2, 40kDa  P     
7 ubiquitin-like modifier activating enzyme 7  P

现在,当基因bb的条目如下所示时

                                           V1 V2  V3  
1                                          bb  P   A  
2              chemokine (C-C motif) ligand 5  P   
3 discoidin domain receptor tyrosine kinase 1  P       
4        heat shock 70kDa protein 6 (HSP70B')  A   
5                                paired box 8  P   
6 replication factor C (activator 1) 2, 40kDa  P   
7 ubiquitin-like modifier activating enzyme 7  P   

然后自动将colum V3的其他条目更改为<NA>,在该列中没有空间用于下面的其他元素:

                                           V1 V2  V3  
1                                          bb  P   A  
2              chemokine (C-C motif) ligand 5  P  <NA> 
3 discoidin domain receptor tyrosine kinase 1  P  <NA>      
4        heat shock 70kDa protein 6 (HSP70B')  A  <NA> 
5                                paired box 8  P  <NA>   
6 replication factor C (activator 1) 2, 40kDa  P  <NA>   
7 ubiquitin-like modifier activating enzyme 7  P  <NA>

然后当新元素到来时,它在列V3中找不到任何位置,然后它会创建一个新列来放置新的元素

                                           V1 V2  V3  V4
1                                          bb  P   A  M
2              chemokine (C-C motif) ligand 5  P  <NA> 
3 discoidin domain receptor tyrosine kinase 1  P  <NA>      
4        heat shock 70kDa protein 6 (HSP70B')  A  <NA> 
5                                paired box 8  P  <NA>   
6 replication factor C (activator 1) 2, 40kDa  P  <NA>   
7 ubiquitin-like modifier activating enzyme 7  P  <NA>

1 个答案:

答案 0 :(得分:0)

如果使用NA元素为空,则无法重现有关元素获取read.csv的部分。如果我指定na.strings='',则元素将为NA。将applyMARGIN=1一起使用以循环遍历行,将行元素转换为因子,并按照PAM的顺序指定级别。如果存在滞后/前导空格,请在转换为“factor”之前使用gsub将其删除,排序,转置并将结果分配给选定的列df1[-1] <- t(apply(...)

df1 <- read.csv('file.csv', header=TRUE, stringsAsFactors=FALSE)
df1[-1] <- t(apply(df1[-1], 1, function(x) 
   sort(factor(gsub('^ +| +$', '', x), levels=c('P', 'A', 'M', '')))))
 df1
 #                                           V1 V2 V3 V4 V5 V6 V7
 #1                                          bb  P  A  M         
 #2              chemokine (C-C motif) ligand 5  P               
 #3 discoidin domain receptor tyrosine kinase 1  P  A  M         
 #4       heat shock 70kDa protein 6 (HSP70B')   A               
 #5                                paired box 8  P  P  P  P      
 #6 replication factor C (activator 1) 2, 40kDa  P               
 #7 ubiquitin-like modifier activating enzyme 7  P  P  P