【问题标题】:Use a text dataframe as input to read_delim使用文本数据框作为 read_delim 的输入
【发布时间】:2020-04-11 13:43:48
【问题描述】:

我正在从许多杂乱无章的 pdf 中读取数据。对于每个 pdf,最终结果是一个 R 数据框,带有一个变量,我称之为文本。数据框的每一行都包含原始 pdf 表的一行的文本表示。每行中的元素用“|”分隔特点。其中一个看起来像这样:-

确诊病例总数|965
nd
新增病例数 3 月 22 日|129
住院总人数|277|28.7
入住 ICU 的总人数|36|3.7
总死亡人数|6
病死率 (CFR)|0.6
爆发或聚集的总数|44
与集群相关的病例总数|243|25.2 输入病例总数|201|20.8
HCW 病例数|247|25.6
中位年龄(岁)|45
年龄范围(岁)|0-95

它可以从这里重新创建:-

structure(list(Text = c("Total number of confirmed cases|965", 
"nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
"Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
"Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
"Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
"Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-13L))

目前,我使用 write_csv() 将其写出,然后使用 read_delim() 将其读回:-

write_csv(HPSC,'data/temp.csv')

HPSC <- read_delim('data/temp.csv', delim='|',
                 skip=1, na = c('-'),
                 col_names = c('Characteristic','Number','Pct')) %>%
mutate(Date = dmy('08.04.2020')) # In the real version, the date comes from elsewhere.

这很繁琐,但并不难将很多这些放在一起,并得到我的最终结果 - 本质上是一个每个 pdf 一行的数据框。

所以,这一切都很好。我需要 read_delim 的全部功能,因为否则我必须编写自己的代码来识别分隔符、跳过行并处理每行上有不同数量的项目的事实。我对自己正在做的事情感到非常满意,但我隐约感到惊讶的是,我不能只将一列数据框提供给 read_delim,并让它完成它的工作。

有没有办法做到这一点?

【问题讨论】:

  • 您不能传递数据框,但可以使用 text 参数传递列。 read.delim(text = HPSC$Text, ...)

标签: r


【解决方案1】:

您的直觉是正确的——您可以将列传递给 read_delim 而无需先将其保存为 CSV,但您需要将其作为向量而不是表格传递。使用您的数据结构,我相信我已经在这里生成了您要求的功能:

x = structure(list(Text = c("Total number of confirmed cases|965", 
                            "nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
                            "Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
                            "Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
                            "Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
                            "Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                                            -13L))

read_delim(x$Text, delim='|',
           skip=1, na = c('-'),
           col_names = c('Characteristic','Number','Pct')) %>%
  mutate(Date = dmy('08.04.2020'))

查看如何从对象中选择“文本”列。

【讨论】:

  • 谢谢!你当然是对的!至少我的直觉仍然有效,有点。最良好的祝愿。
猜你喜欢
  • 2011-04-13
  • 2018-07-13
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2013-11-11
相关资源
最近更新 更多