Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用变量名向量合并左联合后的重复变量_R_Dplyr_Tidyeval - Fatal编程技术网

R 使用变量名向量合并左联合后的重复变量

R 使用变量名向量合并左联合后的重复变量,r,dplyr,tidyeval,R,Dplyr,Tidyeval,在联接和删除重复列之后,我经常遇到合并重复列的非NA值的问题。它类似于所描述的,或。我想围绕coalesce创建一个小函数,并可能包括left_join,以便在一行中处理这个问题,每当我遇到它时,函数本身当然可以根据需要进行处理 在这样做的过程中,我遇到了缺少与所描述的quo相当的Quu_名称的情况 对于reprex,获取一个带有标识信息的数据帧,以便与包含正确值但经常拼写错误的ID的其他数据帧连接 图书馆弹琴 图书馆长廊 iris_标识符% 选择全部、种类 iris_alt_name1% 变异

在联接和删除重复列之后,我经常遇到合并重复列的非NA值的问题。它类似于所描述的,或。我想围绕coalesce创建一个小函数,并可能包括left_join,以便在一行中处理这个问题,每当我遇到它时,函数本身当然可以根据需要进行处理

在这样做的过程中,我遇到了缺少与所描述的quo相当的Quu_名称的情况

对于reprex,获取一个带有标识信息的数据帧,以便与包含正确值但经常拼写错误的ID的其他数据帧连接

图书馆弹琴 图书馆长廊 iris_标识符% 选择全部、种类 iris_alt_name1% 变异种=重寄生种,刚毛=匍匐茎 iris_alt_name2% 变异种=变异种,花色=花色 这个简单的功能可以工作:

替换_xy% 左联合Iris\u alt\u name2,by=c物种,花瓣.长度,花瓣.宽度%>% 替换_xySepal.Length%>% 更换隔片宽度 人头满 >花瓣。长花瓣。宽种萼片。长萼片。宽 >1.4 0.2 setosa 5.1 3.5 >2 1.4 0.2 setosa 4.9 3.0 >3 1.4 0.2 setosa 5.0 3.6 >4 1.4 0.2 setosa 4.4 2.9 >5 1.4 0.2 setosa 5.2 3.4 >6 1.4 0.2 setosa 5.5 4.2 但是对于如何实现几个变量的泛化,我有点不知所措,我认为这是比较容易的部分。下面的片段只是一个绝望的尝试——在尝试了许多变体之后——它大致捕捉到了我想要实现的目标

替换多个警告:“物种”列以不同级别连接因子,强制 >到字符向量 >警告:“种类”列连接字符向量和因子,强制 >转换为字符向量 >错误:未知列'Sepal.Length'和'Sepal.Width'` 任何帮助都将不胜感激

我写道,现在应该是稳定的

# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)
iris_full <- iris_identifiers %>%
  left_join(iris_alt_name1, by = c("Species", "Petal.Length", "Petal.Width")) %>%
  safe_left_join(iris_alt_name2, by = c("Species", "Petal.Length", "Petal.Width"), conflict  = coalesce) %>%
  head

iris_full
#   Petal.Length Petal.Width Species Sepal.Length Sepal.Width
# 1          1.4         0.2  setosa          5.1         3.5
# 2          1.4         0.2  setosa          4.9         3.0
# 3          1.4         0.2  setosa          5.0         3.6
# 4          1.4         0.2  setosa          4.4         2.9
# 5          1.4         0.2  setosa          5.2         3.4
# 6          1.4         0.2  setosa          5.5         4.2

谢谢穆迪!你的软件包听起来很有趣,我已经下载了,很快就会进行测试!对不起,我离开这个项目几天了。。。我不确定我是否理解最后一次变异。。。我得到以下结果:mutate_impl.data中的错误,dots:Column Sepal.Length.x是不支持的NULL类型。我还缺少什么?谢谢@Fons MA,我还在开发功能和界面,反馈将非常宝贵。至于mutate_的问题,我后来经历过,但忘了我在这里使用过它,它不适用于所有版本的dplyr,应该去掉后缀列。我会尽快用更健壮的东西来更新它。在这里,我用select-one_of x,y替换了它,我认为它在版本间是稳定的。当然。。。我没有正确地思考。。。我将dplyr从0.7更新到了0.8,这一切都正常,但我想我会使用select drop,只是为了清晰起见。有什么理由选择变异选项吗?在你的包裹上,我真希望几个月前看到它!现在,大多数合并都是通过我在执行过程中炮制的可怕的检查函数完成的,因此,只有在不久的将来修改代码的某些部分,我才能使用它。我会尽量让您保持更新。我只是习惯于将列设置为NULL以删除它们,插入的括号越少越好,但这个示例表明,使用mutate_at进行此操作是不好的做法,因为它对不太旧的版本不稳定。
replace_many_xy <- function(tbl, vars){
  for(var in vars){
    x <- paste0(var,".x")
    y <-  paste0(var,".y")
    tbl <- mutate(tbl, !!sym(var) := coalesce(!!sym(x) , !!sym(y) )) %>%
     select(-one_of(x,y))
  }
  tbl
}
iris_full <- iris_identifiers %>%
  left_join(iris_alt_name1, by = c("Species", "Petal.Length", "Petal.Width")) %>%
  left_join(iris_alt_name2, by = c("Species", "Petal.Length", "Petal.Width")) %>%
  replace_many_xy(diff_cols) %>% as_tibble()
# # A tibble: 372 x 5
#    Petal.Length Petal.Width Species Sepal.Length Sepal.Width
#           <dbl>       <dbl> <chr>          <dbl>       <dbl>
#  1          1.4         0.2 setosa           5.1         3.5
#  2          1.4         0.2 setosa           4.9         3  
#  3          1.4         0.2 setosa           5           3.6
#  4          1.4         0.2 setosa           4.4         2.9
#  5          1.4         0.2 setosa           5.2         3.4
#  6          1.4         0.2 setosa           5.5         4.2
#  7          1.4         0.2 setosa           4.6         3.2
#  8          1.4         0.2 setosa           5           3.3
#  9          1.4         0.2 setosa           5.1         3.5
# 10          1.4         0.2 setosa           4.9         3  
# # ... with 362 more rows