r - 如何在给定对列表的情况下获取集合的大小?
问题描述
假设我运行了不同的测试来查看某些对象是否相同。测试是成对完成的,我有一个包含相同对象对的数据框:
same.pairs <- data.frame(Test=c(rep(1, 4), rep(2, 6)),
First=c("A", "A", "B", "D", "A", "A", "B", "C", "C", "D"),
Second=c("B", "C", "C", "E", "B", "E", "E", "D", "G", "G"))
##
Test First Second
1 A B
1 A C
1 B C
1 D E
2 A B
2 A E
2 B E
2 C D
2 C G
2 D G
从这里我可以看到,在测试 1 中,因为 A = B 和 A = C 和 B = C,那么 A = B = C 并且这 3 个对象属于一组大小为 3 的对象。
我想知道每个测试集的完整大小。对于这个例子,我想知道对于测试 1,一组是 3 个相同的对象(A,B,C),一组是 2(D,E),对于测试 2,两组是大小 3((A , B, E) 和 (C, D, G))。我不需要知道每个集合中有哪些对象,只需要知道集合的大小以及该大小的集合的计数:
Test ReplicateSize Count
1 3 1
1 2 1
2 3 2
有没有一种优雅的方式来做到这一点?我以为我有这个:
sets <- same.pairs %>%
group_by(Test, First) %>%
summarize(ReplicateSize=n()) %>%
# add 1 to size because above only counting second genotype, need to include first
mutate(ReplicateSize=ReplicateSize+1) %>%
select(-First) %>%
ungroup() %>%
group_by(Test, ReplicateSize) %>%
summarize(Count=n()) %>%
arrange(Test, ReplicateSize)
##
Test ReplicateSize Count
1 2 2
1 3 1
2 2 2
2 3 2
但这会重复计算某些集合,例如在测试 1 中,B&C 被计为大小为 2 的集合,而不是被忽略,因为它们已经是 A 集合的一部分。我不确定如何跳过其中的行第一个对象已被观察为第二个对象,而无需进行复杂的 for 循环。
任何指导表示赞赏。
解决方案
我不完全理解您要完成的工作,但您当前的代码可能会被截断为以下内容:
same.pairs %>%
count(Test, First, name = "ReplicateSize") %>%
count(Test, ReplicateSize, name = "Count") %>%
mutate(ReplicateSize = ReplicateSize + 1)
Test ReplicateSize Count
1 1 2 2
2 1 3 1
3 2 2 2
4 2 3 2
推荐阅读
- ruby - id 为 123 的用户没有正确更新 id 为 123 的项目
- python - 为什么 Requests 库无法读取源代码?
- wysiwyg - 如何在 react-quill Hooks 中添加 className="" 和自定义标签?
- java - 如何移动 3d 对象并将其 360 度旋转显示在 Vuforia for android 的跟踪图像顶部?
- javascript - Javascript JSON 解析 php base64(file_get_contents($file)) 响应
- json - 如何处理不同的 JSON 模式并分派 hem 以由正确的解析器处理?
- c++ - constexpr 函数中的非文字(通过 std::is_constant_evaluate)
- javascript - 搜索使用异步存储存储的项目
- .net-core - 为什么在 vs 代码(.NET Core)中调试时不构建 C# 代码?
- flutter - 如何在 Flutter 中像 Youtube 一样显示时间