0

我有以下数据框:

location <- "https://www.mofa.go.jp/announce/info/conferment/pdfs/2013_sp.pdf"
out <- tabulizer::extract_tables(location)
final <- do.call(rbind, out)
final <- as.data.frame(final) %>%
  janitor::row_to_names(row_number = 2) %>%
  janitor::clean_names()

不幸的是,由于tabulizer::extract_table参见此线程)的提取问题,数据框不干净。

一个数据点跨越多行,然后是空行(屏幕截图中的第 20 和 26 行):

在此处输入图像描述

如果它们之后有一个空行(或者如果之后没有行,如数据框的最后一行),是否可以自动将多行合并为一行?

换言之,第 13-19 行应形成单行,第 21-25 行也应作为单行。列是正确的。

我将不胜感激您的帮助!

4

1 回答 1

1

数据很混乱,因为您可以在同一组(第 126 和 127 行)之间有空行。我已经定义了一个组的开始时间decoration != ""。用国籍来定义群体会更容易,因为它有国籍((问题是来自台湾的人)。

library(tidyverse)
library(data.table)

tidyPage <- function(dt){
  
  setDT(dt)
  dt <- dt[, map(.SD, as.character)]
  dt[, flag := !decoration == ""]
  dt <- dt[which.max(flag):.N]
  dt[, group := rleid(flag)]
  dt[flag == TRUE, flag := c(TRUE, rep(FALSE, .N - 1)), by = group]
  dt[, group := cumsum(flag)]
  
  split(dt, dt$group) %>%
    map_dfr(~map_chr(select(.x, -flag, -group), str_c, collapse = " ")) %>%
    mutate(across(where(is.character), str_squish))
}

location <- "https://www.mofa.go.jp/announce/info/conferment/pdfs/2013_sp.pdf"
out <- tabulizer::extract_tables(location) %>%
  map(~
    as.data.frame(.x) %>%
      janitor::row_to_names(row_number = 2) %>%
      janitor::clean_names()
  ) %>%
  map_dfr(tidyPage)
于 2021-08-24T10:41:17.400 回答