首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按两者共有的组合并数据帧

按两者共有的组合并数据帧
EN

Stack Overflow用户
提问于 2016-12-08 00:21:32
回答 5查看 104关注 0票数 3

我有两个由不同采样器采集的龙虾卵大小数据集,它们将用于评估测量的可变性。每个采样器测量大约50个龙虾蛋\龙虾,这些龙虾来自众多的龙虾。然而,有时一些龙虾是由采样器一而不是采样器二处理的,反之亦然。我想将来自两个采样器的数据合并为一个新的数据集,但删除仅由一个采样器处理的龙虾的所有数据。我已经使用了semi_join和intersect,但我需要在数据集1 -> 2和2 <-1之间执行匹配。我能够创建一个新的dataset,它绑定来自两个采样器的行,但不清楚如何删除新数据集中两个dataset之间的所有唯一龙虾ID。

这是我的数据的一个简化版本,其中有多个鸡蛋面积测量从多个龙虾,但采样并不总是重叠的(即,鸡蛋只由一个采样器从个体测量,而不是另一个采样器):

代码语言:javascript
复制
install.packages(dplyr)
library(dplyr)

sampler1 <- data.frame(LobsterID=c("Lobster1","Lobster1","Lobster2",
                                   "Lobster2","Lobster2","Lobster2",
                                   "Lobster2","Lobster3","Lobster3","Lobster3"),
                       Area=c(.4,.35,1.1,1.04,1.14,1.1,1.05,1.7,1.63,1.8),
                       Sampler=c(rep("Sampler1", 10)))
sampler2 <- data.frame(LobsterID=c("Lobster1","Lobster1","Lobster1",
                                   "Lobster1","Lobster1","Lobster2",
                                   "Lobster2","Lobster2","Lobster4","Lobster4"),
                       Area=c(.41,.44,.47,.43,.38,1.14,1.11,1.09,1.41,1.4),
                       Sampler=c(rep("Sampler2", 10)))

combined <- bind_rows(sampler1, sampler2)

desiredresult <- combined[-c(8, 9, 10, 19, 20), ]

脚本的最后一行是模拟数据的预期结果。我希望限制使用基数R或dplyr。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-08 00:28:05

代码语言:javascript
复制
sampler1 %>% rbind(sampler2) %>% filter(LobsterID %in% intersect(sampler1$LobsterID, sampler2$LobsterID))
票数 6
EN

Stack Overflow用户

发布于 2016-12-08 00:39:13

代码语言:javascript
复制
combined <- bind_rows(sampler1, sampler2)


Lobsters.2.sample <- as.character(unique(sampler1$LobsterID)[unique(sampler1$LobsterID) %in% unique(sampler2$LobsterID)])

combined <- combined[combined$LobsterID %in% Lobsters.2.sample,]
票数 2
EN

Stack Overflow用户

发布于 2016-12-08 02:24:52

使用基本R

代码语言:javascript
复制
combined <-rbind(sampler1, sampler2)
inBoth <- intersect(sampler1[["LobsterID"]], sampler2[["LobsterID"]])
output <- combined[combined[["LobsterID"]] %in% inBoth, ]

intersect查找两个向量的集合并集,为您提供两个样本中的龙虾。所有函数都是矢量化的,所以它应该运行得很快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41022386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档