Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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_Matrix_Dataframe - Fatal编程技术网

R 将字符转换为具有固定列数的数据帧或矩阵

R 将字符转换为具有固定列数的数据帧或矩阵,r,matrix,dataframe,R,Matrix,Dataframe,我试图从一个网站中提取这些值。提取的值如下所示 "3000 ---- ---- ---- ---- '1 UNCH '1" "4600 ---- ---- ---- ---- '1 UNCH '1"

我试图从一个网站中提取这些值。提取的值如下所示

"3000       ----      ----      ----      ----        '1    UNCH                     '1"                        
"4600       ----      ----      ----      ----        '1    UNCH                     '1"                        
"4800       ----      ----      ----      ----        '1    UNCH                     '1"                        
"5000       ----      ----      ----      ----        '1    UNCH                     '1                     300"
"5200       ----      ----      ----      ----        '1    UNCH                     '1"                        
"5400       ----      ----      ----      ----        '1    UNCH                     '1"                        
"5600       ----      ----      ----      ----        '1    UNCH                     '1                      10"
"5800       ----      ----      ----      ----        '1    UNCH                     '1                       1"
"6000       ----      ----      ----      ----        '1    UNCH                     '1                    5461"
"6200       ----      ----      ----      ----        '1    UNCH                     '1                      54"
"6400       ----      ----      ----      ----        '1    UNCH                     '1                    2009"
"6600       ----      ----      ----      ----        '1    UNCH                     '1                     124"
"6800       ----      ----      ----      ----        '1    UNCH                     '1                     410"
"7000       ----      ----      ----      ----        '1     -'1                     '2                   10704"
"7200       ----      ----        '2A     ----        '2     -'1                     '3                    9927"
"7400       ----      ----      ----      ----        '3    UNCH                     '3                    7869"
"7600       ----      ----      ----      ----        '4    UNCH                     '4          30       13596"
"7800       ----      ----      ----      ----        '5     -'1                     '6         109       16030"
"8000         '7        '7        '7        '7        '7     -'1         467        1'0         731       26912"
"8200        1'4       1'4       1'3      ----       1'2     -'2         119        1'4         222       11030"
"8400        2'2       2'2       2'0       2'0       1'7     -'4         426        2'3         172       15743"
"8600        3'1       3'3       2'7       3'0A      3'0     -'4          66        3'4         330       18964"
有些行的列值较少。我想创建一个由11列组成的数据框,空的值应该保持为空。当我尝试基于空间分割值时,列值较少的行会重叠并重复。请找到我试过的代码

  cc=gsub("\\s+"," ",df)
  cc=data.frame(cc)
  cc = data.frame(do.call('rbind', strsplit(as.character(cc),' ',fixed=TRUE)))

更新,原始问题已更改

看起来您的数据是固定宽度格式。您可以使用
?read.fwf
,尽管它的使用在某种程度上取决于数据源的可靠性。如果您获取数据的地方对数据的格式有规定(例如“11列,每列宽10个字符”),这将很有帮助

# pad out each line to the same length
maxlen <- max(sapply(df, nchar)) # it's 110 for your data, it seems
df <- sprintf(paste0("%-", maxlen, "s"), df)
read.fwf(textConnection(df),
         widths=c(4, 11, 10, 10, 11,  9,  8, 12, 11, 12, 12))

您可以尝试在列中使用恒定距离,每列包含字符start:end。如果末尾缺少列,则会将NA填充到列中。 变量“line”包含提取文件的一行

start <- c(1,6,17, 27,37,47,57,65,77,88,100)
end   <- c(5,16,26,36,46,56,64,76,87,99,110)

columns <- list()    
for(j in 1:length(start)){
    if(start[j] <= nchar(line)){
        columns[[j]] <- substr(line, start[j],end[j])
    }
    else{
        y[[j]] <- NA
    }    
}

找出您无法尝试使用
read.table()
的任何原因?为什么
gsub
会弹出空间?似乎在
\\s+
上使用
strsplit
更有意义,我将在后面的步骤中拆分它。我想用一个单一的空间替换所有空白空间,然后基于单个空间分割值,使用读取线从网页中提取值,并获取我想要的部分。所以我将无法使用read Table,因为它似乎不符合我的要求。谢谢你的帮助。如果第一行的值之间有一些空格,则移动到前面的列中。在某些情况下,我需要将NA放在中间的列中。好的,您最初的问题和可复制的示例没有反映这一点,因此我不介意阅读它。我来看看您的更新问题。列之间的分隔符是制表符还是空格?列之间是否始终至少有4个空格?它们只是空间。。我正试图从这个网站上获取价值观。
start <- c(1,6,17, 27,37,47,57,65,77,88,100)
end   <- c(5,16,26,36,46,56,64,76,87,99,110)

columns <- list()    
for(j in 1:length(start)){
    if(start[j] <= nchar(line)){
        columns[[j]] <- substr(line, start[j],end[j])
    }
    else{
        y[[j]] <- NA
    }    
}