- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
sessionInfo-6ren">
left_join
在小标题或数据帧上使用 NA 值按预期工作,但在 tbl 上,它似乎与 NA 不匹配,即使使用选项 na_matches = "na"。
R 版本和包版本
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin18.6.0 (64-bit)
Running under: macOS Mojave 10.14.6
...
other attached packages:
[1] reprex_0.3.0 dbplyr_1.4.2 lubridate_1.7.4 magrittr_1.5 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.1 purrr_0.3.2 readr_1.3.1
[10] tidyr_0.8.3 tibble_2.1.3 ggplot2_3.2.0 tidyverse_1.2.1
...
library(tidyverse)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
df_1 <- tibble(A = c("a", "aa"), B = c("b", "bb"), D = c("d", NA))
df_2 <- tibble(A = c("a", "aa"), C = c("c", "cc"), D = c("d", NA))
copy_to(con, df_1, overwrite = T)
copy_to(con, df_2, overwrite = T)
dt_1 <- tbl(con, "df_1")
dt_2 <- tbl(con, "df_2")
df_1
#> # A tibble: 2 x 3
#> A B D
#> <chr> <chr> <chr>
#> 1 a b d
#> 2 aa bb <NA>
df_2
#> # A tibble: 2 x 3
#> A C D
#> <chr> <chr> <chr>
#> 1 a c d
#> 2 aa cc <NA>
dt_1
#> # Source: table<df_1> [?? x 3]
#> # Database: sqlite 3.29.0 [:memory:]
#> A B D
#> <chr> <chr> <chr>
#> 1 a b d
#> 2 aa bb <NA>
dt_2
#> # Source: table<df_2> [?? x 3]
#> # Database: sqlite 3.29.0 [:memory:]
#> A C D
#> <chr> <chr> <chr>
#> 1 a c d
#> 2 aa cc <NA>
left_join
,首先在数据帧上,然后在 tbls 上:
left_join(df_1, df_2)
#> Joining, by = c("A", "D")
#> # A tibble: 2 x 4
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb <NA> cc
left_join(dt_1, dt_2, na_matches = "na")
#> Joining, by = c("A", "D")
#> # Source: lazy query [?? x 4]
#> # Database: sqlite 3.29.0 [:memory:]
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb <NA> <NA>
C
有预期的
cc
在数据帧的情况下(默认为
na_matches = "na"
)但
<NA>
在 tbl 的情况下,即使使用显式选项
na_matches = "na"
(根据文档,这是默认设置)。
这是出乎意料的 .
na_matches = "never"
的数据帧的结果相同。 :
left_join(df_1, df_2, na_matches = "never")
#> Joining, by = c("A", "D")
#> # A tibble: 2 x 4
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb <NA> <NA>
left_join
因为它是最常见的连接,但是
inner_join
也会出现同样的问题(
full_join
还没有用于数据表),如果我们保留
na_matches = "na"
可能会更加明显同时:
inner_join(dt_1, dt_2, na_matches = "na")
#> Joining, by = c("A", "D")
#> # Source: lazy query [?? x 4]
#> # Database: sqlite 3.29.0 [:memory:]
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
inner_join(df_1, df_2, na_matches = "na")
#> Joining, by = c("A", "D")
#> # A tibble: 2 x 4
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb <NA> cc
最佳答案
为了响应@philipxy 在left_join 过程中进一步挖掘的请求,我进入了left_join
的 Debug模式。 ,首先在数据表上:
debug(left_join)
left_join(dt_1, dt_2, na_matches = "na")
#> debugging in: left_join(dt_1, dt_2, na_matches = "na")
#> debug: {
#> UseMethod("left_join")
#> }
Browse[2]> n
#> debug: UseMethod("left_join")
#> Browse[2]> n
#> debugging in: left_join.tbl_lazy(dt_1, dt_2, na_matches = "na")
#> debug: {
#> add_op_join(x, y, "left", by = by, sql_on = sql_on, copy = copy,
#> suffix = suffix, auto_index = auto_index, ...)
#> }
Browse[3]>
#> debug: add_op_join(x, y, "left", by = by, sql_on = sql_on, copy = copy,
#> suffix = suffix, auto_index = auto_index, ...)
Browse[3]> s
#> debugging in: add_op_join(x, y, "left", by = by, sql_on = sql_on, copy = copy,
#> suffix = suffix, auto_index = auto_index, ...)
#> debug: {
#> if (!is.null(sql_on)) {
#> by <- list(x = character(0), y = character(0), on = sql(sql_on))
#> }
#> else if (identical(type, "full") && identical(by, character())) {
#> type <- "cross"
#> by <- list(x = character(0), y = character(0))
#> }
#> else {
#> by <- common_by(by, x, y)
#> }
#> y <- auto_copy(x, y, copy = copy, indexes = if (auto_index)
#> list(by$y))
#> vars <- join_vars(op_vars(x), op_vars(y), type = type, by = by,
#> suffix = suffix)
#> x$ops <- op_double("join", x, y, args = list(vars = vars,
#> type = type, by = by, suffix = suffix))
#> x
#> }
Browse[4]> f
#> Joining, by = c("A", "D")
#> exiting from: add_op_join(x, y, "left", by = by, sql_on = sql_on, copy = copy,
#> suffix = suffix, auto_index = auto_index, ...)
#> exiting from: left_join.tbl_lazy(dt_1, dt_2, na_matches = "na")
#> exiting from: left_join(dt_1, dt_2, na_matches = "na")
#> # Source: lazy query [?? x 4]
#> # Database: sqlite 3.29.0 [:memory:]
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb NA NA
left_join
来电
left_join.tbl_lazy
在带有
na_matches = “na”
的数据表上选项。
add_op_join
的调用。其定义未提及
na_matches
.
left_join(df_1, df_2)
#> debugging in: left_join(df_1, df_2)
#> debug: {
#> UseMethod("left_join")
#> }
Browse[2]> n
#> debug: UseMethod("left_join")
Browse[2]>
#> debugging in: left_join.tbl_df(df_1, df_2)
#> debug: {
#> check_valid_names(tbl_vars(x))
#> check_valid_names(tbl_vars(y))
#> by <- common_by(by, x, y)
#> suffix <- check_suffix(suffix)
#> na_matches <- check_na_matches(na_matches)
#> y <- auto_copy(x, y, copy = copy)
#> vars <- join_vars(tbl_vars(x), tbl_vars(y), by, suffix)
#> by_x <- vars$idx$x$by
#> by_y <- vars$idx$y$by
#> aux_x <- vars$idx$x$aux
#> aux_y <- vars$idx$y$aux
#> out <- left_join_impl(x, y, by_x, by_y, aux_x, aux_y, na_matches,
#> environment())
#> names(out) <- vars$alias
#> reconstruct_join(out, x, vars)
#> }
Browse[3]>
#> debug: check_valid_names(tbl_vars(x))
Browse[3]>
#> debug: check_valid_names(tbl_vars(y))
Browse[3]>
#> debug: by <- common_by(by, x, y)
Browse[3]>
#> Joining, by = c("A", "D")
#> debug: suffix <- check_suffix(suffix)
Browse[3]>
#> debug: na_matches <- check_na_matches(na_matches)
Browse[3]>
#> debug: y <- auto_copy(x, y, copy = copy)
Browse[3]> na_matches
#> [1] TRUE
Browse[3]> f
#> exiting from: left_join.tbl_df(df_1, df_2)
#> exiting from: left_join(df_1, df_2)
#> # A tibble: 2 x 4
#> A B D C
#> <chr> <chr> <chr> <chr>
#> 1 a b d c
#> 2 aa bb NA cc
left_join
来电
left_join.tbl_df
在数据帧上。再往下,我们看到
na_matches
设置为
TRUE
在用作
left_join_impl
中的参数之前.这一切都是有道理的。
?left_join.tbl_lazy
时文档返回
join.tbl_sql {dbplyr}
的本地页面其中声明了未指定的参数(
…
):
join.tbl_df
更多”。
join.tbl_df
文档链接,它清楚地提到了
na_matches
:
class(df_1)
#> [1] "tbl_df" "tbl" "data.frame"
class(dt_1)
#> [1] "tbl_SQLiteConnection" "tbl_dbi" "tbl_sql"
#> [4] "tbl_lazy" "tbl"
data.frame
和
tbl_df
,而我所说的“数据表”是另一个
tbl_*
包括
tbl_sql
和
tbl_lazy
.所以这个新闻链接也回答了这个问题。
na_matches = 'na'
,对于数据表 默认为
na_matches = 'never'
(没有其他选择)”。
na_matches = "na"
数据表将在不久的将来实现。
关于r - left_join 用于 tbl : na_matches not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57734832/
如何更方便的合并dataframe? 我有三个数据框(table_base/table_a/table_b)。我想按行组合它们以获得结果为“table_final”。下面是我的代码,它可以工作,但有点
假设我有 2 个要合并的 data.frames。数据如下: options(scipen = 999) LHS <- structure( list( v1 = c(1, 2
我想合并两个数据框,其中 df2覆盖 NA 的任何值或出现在 df1 . Merge data frames and overwrite values提供 data.table选项,但我想知道是否有办
我正在合并两个 data.frames,dat1和 dat2 , 通过 temp并且合并没有提供 dat2 的所有值.为什么值来自 dat2合并不正确? 示例数据 dat1 <- data.frame
背景 我有一个简单的辅助函数,它可以将 left_join 应用到任意数量的传递给其他表的 gather 中,并返回一个对象。 例子 # Settings ----------------------
我从左连接中得到了意想不到的 NA 模式。数据来自this week's Tidy Tuesday . library(tidyverse) breed_traits % select(Breed
这里有两个数据集:(这是假数据) library(tidyverse) myfruit myfruit # A tibble: 4 x 2 fruit_name number
如何将列索引用于 dplyr::left_join(和您的家人)? 示例(按列名): library(dplyr) data1 <- data.frame(var1 = c("a"
我有两个要合并的数据框。 “数据”看起来像: Filled_Ticker2LP publishYear CO_1_Name 1: SONC
我想用两个不同的变量 tp join 连接两个数据框。有一个错误表明它无法在第二个数据框中找到变量。但是当我运行函数 colnames() 时,列名出现了。为什么会这样? df_new <- left
我经常遇到合并重复列的非 NA 值并删除重复项的问题。它类似于 in this question 或 this one 所描述的内容。我想围绕 coalesce(并可能包括 left_join)创建一
我有 20 多个不同的数据表,这些数据表由相同的编码系统(北美行业分类系统,NAICS)索引,我想将它们合并到一个表中。 问题是每个表中都有不同级别的详细信息,当我加入时,我想通过失败编码系统的层次结
在尝试获得分组滞后变量的过程中(仅使用 lag 是不可能的),建议的解决方案是提取数据,滞后不同的行,然后重新加入它。 我更喜欢在不创建中间对象的情况下执行此操作,并且希望在链的中间执行此操作。然而,
我有一个名为 a 的 data.frame其结构类似于:- a % mutate(row = row_number()) %>% pivot_longer(cols = -row) %>%
我正在使用dplyrs函数left_join组合两个data.frames。 现在,我想通过在左侧data.frame中使用rownames并在left_join右侧data.frame中使用
我在“R”中有 2 个数据集。 第一个数据库包含特定日期: Value Date # 20 2017-10-19 # 19 2017
当涉及到 MySQL 时,我仍在学习,并且我正在尝试将问题与其答案组合在一起(就像在学校进行测试一样)。这是我通过查询得到的结果: 预期结果是底部 4 行,其中所有数据都可用。 (对我来说)更令人困惑
当沿着一个键连接 data.frames 并且一个键有一个缺失值 (NA) 时,我的直觉是带有 NA 键的行在第二个 data.frame 中应该没有匹配项。令我惊讶的是,如果两个 data.fram
我的问题与此类似,但是我在 LHS 中还有其他列应该保留 https://stackoverflow.com/a/35642948/9285732 y是 x 的子集带有 val1 的更新值。在 x我想
这肯定不是故意的?这是在 dplyr 的其他地方发生的事情吗?的功能,我应该担心吗?爱表演又恨data.table句法。是否有替代 dplyr 的替代方案?和 data.table目前可以安全使用并且
我是一名优秀的程序员,十分优秀!