2015-10-19 49 views
-1

我有以下数据,该数据是这样的:如何遍历包含NA值的列? [R

2010-11-04 to 2010-11-10 2010-11-11 to 2010-11-17 2010-11-18 to 2010-11-24 2010-11-26 to 2010-12-02 
[1,] "Stock194"    "Stock194"    NA      "Stock241"    
[2,] "Stock26"    "Stock217"    NA      "Stock440"    
[3,] "Stock314"    "Stock241"    NA      "Stock485"    
[4,] "Stock334"    "Stock321"    NA      "Stock57"    
[5,] "Stock453"    "Stock334"    NA      "Stock77"    
[6,] "Stock62"    "Stock39"    NA      NA      
[7,] NA      "Stock391"    NA      NA      
[8,] NA      "Stock430"    NA      NA      
[9,] NA      "Stock444"    NA      NA      
[10,] NA      "Stock453"    NA      NA      
[11,] NA      "Stock485"    NA      NA      
[12,] NA      "Stock62"    NA      NA      
[13,] NA      "Stock76"    NA      NA      
[14,] NA      NA      NA      NA      
[15,] NA      NA      NA      NA      
[16,] NA      NA      NA      NA      
[17,] NA      NA      NA      NA      
[18,] NA      NA      NA      NA      
[19,] NA      NA      NA      NA      
[20,] NA      NA      NA      NA      
[21,] NA      NA      NA      NA      
[22,] NA      NA      NA      NA      
     2010-12-03 to 2010-12-09 
[1,] "Stock12"    
[2,] "Stock217"    
[3,] "Stock321"    
[4,] "Stock334"    
[5,] "Stock39"    
[6,] "Stock391"    
[7,] "Stock453"    
[8,] "Stock464"    
[9,] "Stock485"    
[10,] "Stock62"    
[11,] "Stock76"    
[12,] NA      
[13,] NA      
[14,] NA      
[15,] NA      
[16,] NA      
[17,] NA      
[18,] NA      
[19,] NA      
[20,] NA      
[21,] NA      
[22,] NA 

> dput(a) 
structure(c("Stock194", "Stock26", "Stock314", "Stock334", "Stock453", 
"Stock62", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, "Stock194", "Stock217", "Stock241", "Stock321", "Stock334", 
"Stock39", "Stock391", "Stock430", "Stock444", "Stock453", "Stock485", 
"Stock62", "Stock76", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, "Stock241", "Stock440", "Stock485", "Stock57", 
"Stock77", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, "Stock12", "Stock217", "Stock321", "Stock334", 
"Stock39", "Stock391", "Stock453", "Stock464", "Stock485", "Stock62", 
"Stock76", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(22L, 
5L), .Dimnames = list(NULL, c("2010-11-04 to 2010-11-10", "2010-11-11 to 2010-11-17", 
"2010-11-18 to 2010-11-24", "2010-11-26 to 2010-12-02", "2010-12-03 to 2010-12-09" 
))) 
> 

我也有一个环,看起来像这样:

for (i in names(results2)) { 
input <- i 

# other steps and calculations 

} 

我需要的循环做的是例如在第一步抢整列行1到n,放入输入 - 包括NA值。

问题在于,由于某些原因,名称(results2)未读取该列。我认为这是因为NA值在那里,但我不确定。

+0

你的问题不是很清楚。如果你问我,你的主要问题是错误的列名。我会检查'make.names'函数。 –

+1

该函数没有用于数据帧的'name()'。对于像你这样的矩阵,试试'colnames' –

+1

我推荐'(我在seq(ncol(a))){iname < - colnames(a)[i]; icol < - a [,i]; ...}'。循环名称对于矩阵来说是一种坏的/危险的做法,因为没有什么能够阻止名称重复。例如,矩阵(1:4,2,dimnames = list(c(1,1),c(2,2)))'。作为一般规则,迭代迭代器,而不是迭代值。 – Frank

回答

2

我想你想要做的是循环每列。按索引而不是按名称访问您的矩阵。

for (i in (1:ncol(results2))) { 
input <- results2[,i] 
# other steps and calculations 
} 

它似乎与列名没有任何关系,因为您的列具有有效且唯一的名称。既然如此,如果你愿意的话,你可以通过名字进入,正如@Frank所说的那样可能不稳定。

for (i in colnames(results2)) { 
input <- results2[,i] 
# other steps and calculations 
} 
+0

也许值得注意的是:与OP的猜测相反,他们的问题与“NA”无关;这应该解决它。 – Frank