确定输入文件中的数据类型

时间:2014-03-21 15:51:09

标签: r file types data.table

我正在读取前两行的文件(cols是空格分隔的):

c1 c2 c3 c4 c5

1 2 3 4 5

我想读取前两行并确定第一行是字符向量还是数字向量? (在上面的示例中,它是字符,但在其他文件中可以是数字)。

我该怎么做?我尝试使用read.table,data.table和fread,但它们都没有正常工作。 read.table将每个元素转换为整数。你能用一种简单的方法帮助我吗?

3 个答案:

答案 0 :(得分:1)

这应该适合你。

df <- data.frame(matrix(rnorm(5),ncol=5))
write.table(df, "hdr.txt", sep=" ")
write.table(df, "nohdr.txt", sep=" ",col.names=F)

input <- read.table("hdr.txt",colClasses="character",nrows=1) # grab first line
hdr   <- any(is.na(as.numeric(input)))                   # hdr=T if any character
hdr
# [1] TRUE

input <- read.table("nohdr.txt",colClasses="character",nrows=1) # grab first line
hdr   <- any(is.na(as.numeric(input)))                   # hdr=F if all numeric
hdr
# [1] FALSE
data  <- read.table(header=hdr,...)

所以请阅读第一行,将所有内容强制转换为角色。将as.numeric(...)函数应用于该函数将为任何无法强制转换为数字的元素返回NA。如果发生这种情况,您就会有一个标题。

答案 1 :(得分:1)

你可以按照

的方式做点什么
twoLines <- readLines("myFile", nrow=2)
firstLineFields <- strsplit(twoLines, " ")[[1]]
allNumeric <- !any(is.na(as.numeric(firstLineFields)))
allChar <- all(is.na(as.numeric(firstLineFields)))

答案 2 :(得分:0)

您是否只是在寻找str功能?

df <- data.frame(number_column = c(1, 2, 3),
                 factor_Column = c('a', 'b', 'c'),
                 date_column = as.Date(c('2014-01-01', '2014-01-01', '2014-01-01'),
                                      format = '%Y-%m-%d'))       
str(df)

'data.frame':   3 obs. of  3 variables:
 $ number_column: num  1 2 3
 $ factor_Column: Factor w/ 3 levels "a","b","c": 1 2 3
 $ date_column  : Date, format: "2014-01-01" "2014-01-01" ...