R 如何将TIBLES与常见但不相同的列组合?

R 如何将TIBLES与常见但不相同的列组合?,r,tibble,R,Tibble,我有两个藏书,每个藏书最多有4列。每个列名要么是两者通用的,要么是其中一个缺少。我需要将它们组合成一个包含两行的tible,并在缺少它们的列中NA。我需要一般地这样做,所以它可以处理或多或少缺失的列。下面是从两个示例网页生成TIBLES的代码 library(tidyverse) library(htmltab) read_results <- function(filename) { doc <- read_file(filename) df <- as_tibbl

我有两个藏书,每个藏书最多有4列。每个列名要么是两者通用的,要么是其中一个缺少。我需要将它们组合成一个包含两行的tible,并在缺少它们的列中
NA
。我需要一般地这样做,所以它可以处理或多或少缺失的列。下面是从两个示例网页生成TIBLES的代码

library(tidyverse)
library(htmltab)

read_results <- function(filename) {
  doc <- read_file(filename)
  df <- as_tibble(htmltab(doc=doc, which="//table[@id='results']"))
  colnames(df) <- c("pos", "name", "time", "age_cat", "age_grade", "gender", "gender_pos", "note", "total_runs")
  tib = t(as_tibble(df) %>% group_by(substr(note,1,12)) %>% summarise(number=n()))

  colnames(tib) <- as.character(unlist(tib[1,]))
  tib = tib[-1,]
  r <- t(tib)
  return (r);
}

# saved from http://www.parkrun.org.uk/henleyonthames/results/weeklyresults/?runSeqNumber=2
r2 = read_results("results _ henleyonthames parkrun_2.html")
# saved from http://www.parkrun.org.uk/henleyonthames/results/weeklyresults/?runSeqNumber=4
r4 = read_results("results _ henleyonthames parkrun_4.html")
我想把
tuall
构建成

     First Timer! New PB! PB stays at  <NA>
     58           11        3           4
     62           16       11           0
第一个计时器!新PB!PB停留在
58           11        3           4
62           16       11           0

您的问题是r2的一列的名称为NA。因此,大多数基于列名对类似矩阵的对象进行配对的函数都会失败。
要解决这个问题,请将这一行添加到函数:names(tib)[is.na(names(tib))]您的问题是r2的一列中有一个na作为name。因此,大多数基于列名对类似矩阵的对象进行配对的函数都会失败。
要解决这个问题,请将这一行添加到您的函数:names(tib)[is.na(names(tib))]怎么样
dplyr::bind_rows
?@aosmith如何按名称将列与
bind_rows
匹配?我对您的问题的理解是,您的tibbles共享列名,
bind_rows
通过匹配列名来工作。嗯,它适用于数据帧,但不适用于TIBLES<代码>绑定行(as.data.frame(r2)、as.data.frame(r4))。我不知道这是否是个问题。我也收到了很多关于强制因素的警告。这不是一个干净的解决方案。那么
dplyr::bind_rows
呢?@aosmith我如何按名称将列与
bind_rows
匹配?我对你的问题的理解是,你的tibbles共享列名,
bind_rows
通过匹配列名来工作。嗯,它可以与数据帧匹配,但不能与tibbles匹配<代码>绑定行(as.data.frame(r2)、as.data.frame(r4))。我不知道这是否是个问题。我也收到了很多关于强制因素的警告。这不是一个干净的解决方案。
     First Timer! New PB! PB stays at  <NA>
     58           11        3           4
     62           16       11           0
library(tidyverse)
library(htmltab)

read_results <- function(filename) {
  doc <- read_file(filename)
  df <- as_tibble(htmltab(doc=doc, which="//table[@id='results']"))
  colnames(df) <- c("pos", "name", "time", "age_cat", "age_grade", "gender", "gender_pos", "note", "total_runs")
  tib = t(as_tibble(df) %>% group_by(substr(note,1,12)) %>% summarise(number=n()))

  colnames(tib) <- as.character(unlist(tib[1,]))
  tib = tib[-1,]
  names(tib)[is.na(names(tib))] <- "Blank"  ## New Line
  r <- t(tib)
  return (r);
}

# saved from http://www.parkrun.org.uk/henleyonthames/results/weeklyresults/?runSeqNumber=2
r2 = read_results("results _ henleyonthames parkrun_2.html")
# saved from http://www.parkrun.org.uk/henleyonthames/results/weeklyresults/?runSeqNumber=4
r4 = read_results("results _ henleyonthames parkrun_4.html")

dplyr::bind_rows(as_data_frame(r2),as_data_frame(r4))

# A tibble: 2 × 4
  `First Timer!` `New PB!` `PB stays at ` Blank
           <chr>     <chr>          <chr> <chr>
1             58        11              3     4
2             62        16             11  <NA>