R 如何将TIBLES与常见但不相同的列组合?
我有两个藏书,每个藏书最多有4列。每个列名要么是两者通用的,要么是其中一个缺少。我需要将它们组合成一个包含两行的tible,并在缺少它们的列中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
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>