2014-10-31 49 views
0

这里的data.table林一起工作:data.table:数字列名

> head(dataTable) 
    persnr  1993  1994 
1: 60487416 0.5777598  NA 
2: 60487511  NA 5.245855 
3: 60488034 0.5777598 23.100167 
4: 60488147 0.5777598  NA 
5: 60488240 0.5777598 23.100167 
6: 60488338 0.5777598 23.100167 

具有多年列数字是非常有用的,因为我可以简单地通过这些迭代。然而,它有一个缺点:不是将其作为对象名称

dataTable[is.na(1993),] 
Empty data.table (0 rows) of 3 cols: persnr,1993,1994 

它的失误1993一个整数。否则我无法解释它将如何满足这种条件的零行。当列名是数字时,如何检查NA值?

+3

尝试:dataTable [is.na(\'1993 \')] – ctbrown 2014-10-31 23:27:17

+0

完美。如果我可能会问一个后续问题:由于迭代的原因,如果我保存了'x < - 1993',怎么办? 'dataTable [is.na(\'x \')]'不起作用。 – FooBar 2014-10-31 23:34:59

+0

这是不雅的,但你可以这样做: 'X < - 引号(is.na(\'1993年\'))'' 的dataTable [EVAL(X)]' 你还是留下的问题创建x的RHS。你也可以使用'?parse' – ctbrown 2014-10-31 23:47:23

回答

0

你可能想对待你data.frame就像一个矩阵,并使用应用功能找到NA值:

申请(dataTable中,1,is.na)

那将比遍历列更快。

如果你想与任何NA找到行的值,你可以这样做:

申请(dataTable中,1,函数(X){任何(is.na(X))})