2014-09-04 53 views
2

我想在制表符分隔的文件与一列指示由“罗马”枚举表示的类来读取(每个文件包含任一I,II,III或IV在第二列)。但是,对于仅包含“i”的文件,此列将转换为NA值。我可以重现这个错误有一个小的测试文件看起来像这样:[R转换列NA值 - 为什么?

animal class info 
dog i a 
cat i a 
rabbit i b 

当我读入R:

> d<-read.delim("test_roman.csv", sep="\t") 
> d 
    animal class info 
1 dog NA a 
2 cat NA a 
3 rabbit NA b 

缺少什么我在这里? read.delim总是在类似的文件上为我工作。

+0

我编辑的问题,使这一点更清晰。我有不同的文件,每个文件仅包含任一'i','ìi'...它们被加载在R和然后被组合。 – aldorado 2014-09-04 08:04:43

回答

5

你可能已经发现了,如果你已经显现类型:

typeof(d$class) 
[1] "complex" 

你显然不希望有一个复数,所以我们执行“人物”类:

read.table("test_roman.csv", sep="\t", fill=T, colClasses="character", header=T) 
# animal class info 
# dog  i  a 
# cat  i  a 
# rabbit i  b 

如果您的文件中不仅包含IIIV,它的工作原理仍然:

read.delim("test_roman2.csv", sep="\t") 
# animal class info 
#1  dog  i a 
#2  cat  i a 
#3 rabbit  i b 
#4 rabbit  iv b 
#5 rabbit  ii b 
+0

我也会这么想,但如果在“班级”列中有其他值,那么不应该将该列自动检测为字符或因子? – A5C1D2H2I1M1N2O1R2T1 2014-09-04 07:54:20

+0

@AnandaMahto是的,的确,那么它的工作原理,如图我的更新。 – martin 2014-09-04 07:57:06

+0

没想到那个!我正在查看是否可能存在隐藏在'\ ti'中的转义序列。非常感谢!但有一个问题仍然存在:如果我有一个我想用于计算的数字第四列,该怎么办?它现在也将是一个角色。在readin之后我是否需要转换它,还是有更简单的解决方案? – aldorado 2014-09-04 07:57:51