是否有只解析ASCI文件块段的R函数?

是否有只解析ASCI文件块段的R函数?,r,parsing,text-files,R,Parsing,Text Files,我有这样一个文本文件: 4 -- Elmo857 Jaskolski867 (10 y/o M) Brockton, Massachusetts VITAL SIGNS * Creatinine Ratio = 13.06 * Glucose = 65.38 * Height = 144.60 ----- 3 -- Lan153 Kris249 (14 y/o F) South Hadley, Mas

我有这样一个文本文件:

4 -- Elmo857 Jaskolski867 (10 y/o M) Brockton, Massachusetts

VITAL SIGNS

  * Creatinine Ratio =  13.06
  *                   Glucose =  65.38
  *                    Height = 144.60

-----
3 -- Lan153 Kris249 (14 y/o F) South Hadley, Massachusetts 

VITAL SIGNS

  * Creatinine Ratio =   0.79
  *                   Glucose =  67.06
  *                    Height = 156.80

-----
我需要在R中解析它以生成这样的数据帧

ID Name                Age Gender Location                  Creatinine Ratio Glucose Height

4  Elmo857Jaskolski867 10  M      Brockton,Massachusetts    13.06          65.38   144.6

3  Lan153Kris249       14  F      SouthHadley,Massachusetts 0.79           67.06   156.8
已经有了处理特定解析请求的答案,但我找不到任何处理块解析的答案(每个先证者都受到“----”的限制)。
有我用的指针吗?

这对于
tidyverse
来说很简单

library(dplyr)
library(stringr)

df <- text %>%               #assumes your text is a single character string
  str_split("-----") %>%     #split at -----
  unlist() %>%               #unlist
  str_trim() %>%             #trim spaces
  enframe(name = NULL) %>%   #convert to dataframe (tibble) - one column called value
  mutate(ID = str_extract(value, "^\\d+"),                          #first digits
         Name = str_trim(str_match(value, "-- (.+?) \\(")[,2]),     #between -- and (
         Age = as.numeric(str_match(value, "\\((\\d+)")[,2]),       #digits after (
         Gender = str_match(value, "(M|F)\\)")[,2],                 #MF before )
         Location = str_trim(str_match(value, "\\) (.+?)\\n")[,2]), #after ) to end line
         Creat = as.numeric(str_match(value, "Ratio =\\s+([\\.0-9]+)")[,2]),
         Glucose = as.numeric(str_match(value, "Glucose =\\s+([\\.0-9]+)")[,2]),
         Height = as.numeric(str_match(value, "Height =\\s+([\\.0-9]+)")[,2])) %>% 
  filter(!is.na(ID)) %>%     #remove final blank row
  select(-value)             #remove original text

df

  ID    Name                   Age Gender Location                    Creat Glucose Height

1 4     Elmo857 Jaskolski867    10 M      Brockton, Massachusetts     13.1     65.4   145.
2 3     Lan153 Kris249          14 F      South Hadley, Massachusetts  0.79    67.1   157.
库(dplyr)
图书馆(stringr)
df%#假设您的文本是单个字符串
str#u split(“----”)%>%#在-----
unlist()%>%#unlist
str_trim()%>%#修剪空间
enframe(name=NULL)%>%#转换为数据帧(TIBLE)-一列称为value
变异(ID=str_extract(value,“^\\d+”),#第一个数字
Name=str\u trim(str\u match(值,“-(.+?)\ \”[,2]),介于-,和之间(
年龄=为.numeric(str_匹配(值,“\\(\\d+))[,2]),后面是数字(
性别=stru匹配(值,“(M | F)\\)”[,2],#MF之前)
位置=str#trim(str#U匹配(值,“\\)(.+?)\\n“[,2]),#后)到结束行
Creat=as.numeric(str\u匹配(值,“比率=\\s+([\\\.0-9]+)”)[,2]),
葡萄糖=as.numeric(str_匹配(值,“葡萄糖=\\s+([\\\.0-9]+)”)[,2]),
高度=as.numeric(str_匹配(值,“Height=\\s+([\\\.0-9]+)”[,2]))%>%
过滤器(!is.na(ID))%>%#删除最后一个空行
选择(-value)#删除原始文本
df
ID姓名年龄性别位置创建身高
1 4 Elmo857 Jaskolski867 10米马萨诸塞州布罗克顿13.1 65.4 145。
马萨诸塞州南哈德利249 14楼,0.79 67.1 157。

您可以使用
f=file()
创建到该文件的连接;然后
读取行(f,n=1)
将一次读取一行。您可以使用它逐行读取,每次到达下一行时停止。