r - 比较一个或两个数据帧 r 中的多列
问题描述
我有一个数据框:
name<-c('a','b','c','d','e')
type<-c('x','x','y','x','y')
chr<- c('ch1','ch1','ch1','ch2','ch2')
pos<- c(5000, 5100, 4999,5500,5100)
df<-data.frame(name,type, chr,pos)
我想遍历每一行,如果类型不相等,并且 chr 相等,并且 pos 在 abs(100) 内,然后使用匹配项创建一个新的 df (使用匹配名称的新列)。对于上述 df 行 1 和 3 将匹配,结果将是
理想情况下,我不想要互惠匹配,所以我想要
如果更容易,我可以根据类型分成两个 dfs。
我尝试了合并和过滤器(dplyr)的变体,但无处可去。
解决方案
我们可以根据type
列拆分数据,做一full_join
by
'chr'
列和filter
列间绝对值pos
小于100的行。
library(dplyr)
df %>%
group_split(type) %>%
purrr::reduce(full_join, by = 'chr') %>%
filter(abs(pos.x - pos.y) < 100)
# A tibble: 1 x 7
# name.x type.x chr pos.x name.y type.y pos.y
# <fct> <fct> <fct> <dbl> <fct> <fct> <dbl>
#1 a x ch1 5000 c y 4999
然后,您可以删除任何不需要的列并根据您的要求重命名它们。
推荐阅读
- citrus-framework - (log) 使用 citrus-framework 监视文件
- c++ - 在 Linux 上使用 boost::serialization 序列化 unique_ptr 的 std::vector 失败
- java - 为什么我们对 CPU 有核心/线程限制?
- javascript - 我想使用 JavaScript 在网页中打开隐身模式
- acumatica - Acumatica 确定单击了哪个按钮(保存或完成)
- javascript - Typescript 接口并创建该接口的对象
- php - KendoUI 100% 堆积柱形图未正确显示
- python - gensim Doc2Vec 是否区分具有正面和负面上下文的相同句子。?
- html - 来自 DynamoDB 的数据中的 If 语句以显示特定值的 div
- ios - UINavigationBar titleTextAttributes 从视图控制器返回后未更新