首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在特定标记处分割数据

在特定标记处分割数据
EN

Stack Overflow用户
提问于 2022-11-14 14:49:28
回答 1查看 27关注 0票数 0

我想要创建一个脚本,在txt文件中读取并在特定的点拆分它。文本文件如下所示:

代码语言:javascript
复制
>>PARAM:EDGER

a   10
b   10
c   30

>>PARAM:GSEA

d   10
e   10
f   30

>>PARAM:GO

g   2
h   3

>>PARAM:KEGG

i   9
j   20

这些值是以制表符分隔的。

我用data <- read.table("config_2_R.txt",header=FALSE, sep="\t",fill = TRUE)在文件中读到

我想在>>PARAM:.例如:

代码语言:javascript
复制
df1
v1  v2
a   10
b   10
c   30

df2
v1  v2
d   10
e   10
f   30

df3
v1  v2
g   2
h   3

df4
v1  v2
i   9
j   20

我怎么能做到呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 14:57:42

您可以同时读取所有数据,然后找到">>“模式来分割数据,然后将每个块作为data.frame读取。例如

代码语言:javascript
复制
lines <- readLines("config_2_R.txt")
dfs <- lapply(split(lines, cumsum(grepl(">>", lines))), function(x) {
  read.table(text=x[-(1:2)])
})

这将返回一个data.frames列表,它通常比全局环境中的许多不同变量更容易处理。但是如果你真的需要不同的变量,你可以用

代码语言:javascript
复制
list2env(setNames(dfs, paste0("df", seq_along(dfs))), env=globalenv())

或者,如果您希望将它们全部读入一个data.frame中,但添加一个列以指示PARAM: value是什么,则可以这样做

代码语言:javascript
复制
lines <- readLines("config_2_R.txt")
dfs <- lapply(split(lines, cumsum(grepl(">>", lines))), function(x) {
  source <- gsub(">>PARAM:","", x[1])
  cbind(read.table(text=x[-(1:2)]), source)
})
do.call("rbind", dfs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74433506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档