R:如何读取一些字符串字段也包含空格的以空格分隔的表
我在导入一个由空格/多个空格分隔的文本文件时遇到了一些问题,该文件还包含带有字符串的列,这些字符串的空格不应被解释为分隔符 该表没有列名,最多有9列。第6列由一个带空格的字符串操作。第4、7、8、9列是可选的,部分缺失 我的想法是在读取表格时使用固定的列宽,但从技术上讲无法实现这一点 以下是文件url: 因为read.table抛出了一个错误R:如何读取一些字符串字段也包含空格的以空格分隔的表,r,fixed-width,read.table,R,Fixed Width,Read.table,我在导入一个由空格/多个空格分隔的文本文件时遇到了一些问题,该文件还包含带有字符串的列,这些字符串的空格不应被解释为分隔符 该表没有列名,最多有9列。第6列由一个带空格的字符串操作。第4、7、8、9列是可选的,部分缺失 我的想法是在读取表格时使用固定的列宽,但从技术上讲无法实现这一点 以下是文件url: 因为read.table抛出了一个错误 > read.table("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.t
> read.table("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt",sep="")
Fehler in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
Zeile 1 hatte keine 9 Elemente
我是这样做的
lines <- readLines("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt")
记录如下: 这是我通过@bdecaf找到的解决方案
lines <- readLines("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt")
w <- list(c(1,12), c(13,22), c(23,31), c(32,38), c(39,41), c(42,72), c(73,76), c(77,80), c(81,87))
ns <- c()
for(i in 1:length(w)) {
ns[i] <- paste("C", i, sep = ".")
assign(ns[i], str_trim(substring(lines, w[[i]][1], w[[i]][2])))
}
obj.list <- lapply(ns, get)
names(obj.list) <- ns
df <- data.frame(obj.list)
我认为技巧是把它看作是固定宽度的文件。下面的问题和答案应该能帮助你:谢谢,这为我指明了正确的方向!!是的,那是最好的办法。作为参考,有一个函数
write.fwf
,如果有必要,可以将数据写回固定宽度的格式。
lines <- readLines("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt")
w <- list(c(1,12), c(13,22), c(23,31), c(32,38), c(39,41), c(42,72), c(73,76), c(77,80), c(81,87))
ns <- c()
for(i in 1:length(w)) {
ns[i] <- paste("C", i, sep = ".")
assign(ns[i], str_trim(substring(lines, w[[i]][1], w[[i]][2])))
}
obj.list <- lapply(ns, get)
names(obj.list) <- ns
df <- data.frame(obj.list)