- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到 merge
的意外行为基础函数 R
以及 left_join
dplyr
的功能.
以下是数据的最小示例:
df1 <- read.table(text="serialno var1 pos_var1
1 C001 NA NA
2 C002 NA NA
3 C003 0.1790000 1
4 C004 NA NA
5 C007 0.0645000 1
6 C010 0.3895000 1
11 C016 0.2805000 1
12 C017 0.7805001 1", header=T, stringsAsFactors=F)
df1
serialno var1 pos_var1
1 C001 NA NA
2 C002 NA NA
3 C003 0.1790000 1
4 C004 NA NA
5 C007 0.0645000 1
6 C010 0.3895000 1
11 C016 0.2805000 1
12 C017 0.7805001 1
df2 <- read.table(text="serialno var1 var2
1 C003 0.1790 1.1305
2 C007 0.0645 0.2985
3 C010 0.3895 0.1705
4 C016 0.1740 0.3980
5 C017 0.4840 0.3375", header=T, stringsAsFactors=F)
df2
serialno var1 var2
1 C003 0.1790 1.1305
2 C007 0.0645 0.2985
3 C010 0.3895 0.1705
4 C016 0.1740 0.3980
5 C017 0.4840 0.3375
left_join(df1,df2)
Joining by: c("serialno", "var1")
serialno var1 pos_var1 var2
1 C001 NA NA NA
2 C002 NA NA NA
3 C003 0.1790000 1 1.1305
4 C004 NA NA NA
5 C007 0.0645000 1 0.2985
6 C010 0.3895000 1 0.1705
7 C016 0.2805000 1 NA
8 C017 0.7805001 1 NA
var2
的最后两个值成为
0.3980
和
0.3375
而不是
NAs
.
merge
类似的结果:
merge(df1,df2, all.x=T)
serialno var1 pos_var1 var2
1 C001 NA NA NA
2 C002 NA NA NA
3 C003 0.1790000 1 1.1305
4 C004 NA NA NA
5 C007 0.0645000 1 0.2985
6 C010 0.3895000 NA 0.1705
7 C016 0.2805000 1 NA
8 C017 0.7805001 1 NA
var1
在两个数据帧中(注意
var1
两个数据帧中的变量除了小数点外是相同的)问题已解决:
left_join(df1[,-2],df2[,-2])
Joining by: "serialno"
serialno pos_var1 var2
1 C001 NA NA
2 C002 NA NA
3 C003 1 1.1305
4 C004 NA NA
5 C007 1 0.2985
6 C010 NA 0.1705
7 C016 1 0.3980
8 C017 1 0.3375
var1
引起的。但我预计
var1
在连接中第一个指定的数据框中覆盖第二个数据框中的数据框,而不会产生任何副作用。
最佳答案
跟进上述有用的评论
如果你没有提到你想要的列名left_join()
或 merge()
数据框,然后将考虑所有具有公共(public)列名的列。
你得到NA
在 var2 列的最后两个位置,因为这两个函数都使用 serialno
合并数据帧和 var1
列(在 df1 和 df2 之间通用),以及列 var1
的所有值在 df1 和 df2 中不匹配。
因此,如果您愿意合并两个数据框,最好提及您需要合并或连接的列名
在你的情况下
# using merge()
merge(df1, df2, by = c('serialno'), all.x=T)
#> merge(df1,df2, by = c('serialno'), all.x=T)
#serialno var1.x pos_var1 var1.y var2
#1 C001 NA NA NA NA
#2 C002 NA NA NA NA
#3 C003 0.1790000 1 0.1790 1.1305
#4 C004 NA NA NA NA
#5 C007 0.0645000 1 0.0645 0.2985
#6 C010 0.3895000 1 0.3895 0.1705
#7 C016 0.2805000 1 0.1740 0.3980
#8 C017 0.7805001 1 0.4840 0.3375
# using left_join()
left_join(df1, df2, by = c("serialno"))
#> left_join(df1, df2, by = c("serialno"))
#serialno var1.x pos_var1 var1.y var2
#1 C001 NA NA NA NA
#2 C002 NA NA NA NA
#3 C003 0.1790000 1 0.1790 1.1305
#4 C004 NA NA NA NA
#5 C007 0.0645000 1 0.0645 0.2985
#6 C010 0.3895000 1 0.3895 0.1705
#7 C016 0.2805000 1 0.1740 0.3980
#8 C017 0.7805001 1 0.4840 0.3375
关于r - 合并和 dplyr 的 left_join 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438554/
如何更方便的合并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目前可以安全使用并且
我是一名优秀的程序员,十分优秀!