我正在读取前两行的文件(cols是空格分隔的):
c1 c2 c3 c4 c5
1 2 3 4 5
我想读取前两行并确定第一行是字符向量还是数字向量? (在上面的示例中,它是字符,但在其他文件中可以是数字)。
我该怎么做?我尝试使用read.table,data.table和fread,但它们都没有正常工作。 read.table将每个元素转换为整数。你能用一种简单的方法帮助我吗?
答案 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" ...