首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何使用R从一个大的文本文件中提取几行选择行?

我如何使用R从一个大的文本文件中提取几行选择行?
EN

Stack Overflow用户
提问于 2020-11-03 02:18:53
回答 2查看 43关注 0票数 0

我对堆栈溢出相当陌生,但在搜索引擎中没有找到它。如果这个问题不应该在这里问,请让我知道。

我有一个非常大的文本文件。它有16个条目,每个条目看起来像这样:

代码语言:javascript
复制
AI_File 10
Version 
Date    20200708 08:18:41
Prompt1 LOC    
Resp1   H****
Prompt2 QUAD   
Resp2   1012   
TransComp   c-p-s
Model   Horizontal
### Computed Results
LAI 4.36
SEL 0.47
ACF 0.879
DIFN    0.031
MTA 40.
SEM 1.
SMP 5
### Ring Summary
MASK    1   1   1   1   1
ANGLES  7.000   23.00   38.00   53.00   68.00
AVGTRANS    0.038   0.044   0.055   0.054   0.030
ACFS    0.916   0.959   0.856   0.844   0.872
CNTCT#  3.539   2.992   2.666   2.076   1.499
STDDEV  0.826   0.523   0.816   0.730   0.354
DISTS   1.008   1.087   1.270   1.662   2.670
GAPS    0.028   0.039   0.034   0.032   0.018
### Contributing Sensors
### Observations
A   1   20200708 08:19:12   x   31.42   38.30   40.61   48.69   60.28
L   2   20200708 08:19:12   1   5.0e-006
B   3   20200708 08:19:21   x   2.279   2.103   1.408   5.027   1.084
B   4   20200708 08:19:31   x   1.054   0.528   0.344   0.400   0.379
B   5   20200708 08:19:39   x   0.446   1.255   2.948   3.828   1.202
B   6   20200708 08:19:47   x   1.937   2.613   5.909   3.665   5.964
B   7   20200708 08:19:55   x   0.265   1.957   0.580   0.311   0.551

几乎所有这些都是垃圾信息,我希望为整个文件运行一些代码,这些代码只会给我所有16个条目的"Resp2“和"LAI”行。这样的任务在R中是可行的吗?如果是这样,我会怎么做呢?

非常感谢你的帮助,如果我能提供更多的信息来澄清任何事情,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-03 02:50:06

我已将您的文件另存为文本文件并读取了行。然后,您可以使用regex来提取所需的行。然而,我觉得我的方法相当笨拙,我打赌还有更优雅的方法(也许也可以使用(unix)命令行工具)。

代码语言:javascript
复制
data <- readLines("testfile.txt")

library(stringr)
resp2 <- as.numeric(str_trim(str_extract(data, "(?m)(?<=^Resp2).*$")))
lai <- as.numeric(str_trim(str_extract(data, "(?m)(?<=^LAI).*$")))

data_extract <- data.frame(
  resp2 = resp2[!is.na(resp2)],
  lai = lai[!is.na(lai)]
)

data_extract 

  resp2  lai
1  1012 4.36
票数 0
EN

Stack Overflow用户

发布于 2020-11-03 03:06:56

基于tidyverse的解决方案如下所示。

代码语言:javascript
复制
library(dplyr)
library(vroom)
library(stringr)
library(tibble)
library(tidyr)

vroom_lines('data') %>%
  enframe() %>%
  filter(str_detect(value, 'Resp2|LAI')) %>%
  transmute(value = str_squish(value)) %>%
  separate(value, into = c('name', 'value'), sep = ' ')

#   name  value
#   <chr> <chr>
# 1 Resp2 1012 
# 2 LAI   4.36 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64651099

复制
相关文章

相似问题

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