是否有只解析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)
将一次读取一行。您可以使用它逐行读取,每次到达下一行时停止。