Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何读取一些字符串字段也包含空格的以空格分隔的表_R_Fixed Width_Read.table - Fatal编程技术网

R:如何读取一些字符串字段也包含空格的以空格分隔的表

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

我在导入一个由空格/多个空格分隔的文本文件时遇到了一些问题,该文件还包含带有字符串的列,这些字符串的空格不应被解释为分隔符

该表没有列名,最多有9列。第6列由一个带空格的字符串操作。第4、7、8、9列是可选的,部分缺失

我的想法是在读取表格时使用固定的列宽,但从技术上讲无法实现这一点

以下是文件url:

因为read.table抛出了一个错误

> 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)