r - R数据框中共享组件的数量
问题描述
我有一个数据框如下:
deput(data)
structure(list(genome = c("A", "A", "A", "A", "B", "B", "B",
"B"), gene = c("esaA", "esaB", "esaC", "esaC", "essA", "essB",
"essC", "esaA")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L), spec = structure(list(cols = list(
genome = structure(list(), class = c("collector_character",
"collector")), gene = structure(list(), class = c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
我对每个基因组之间共享的项目数量感兴趣,例如在 A 和 B 之间它是 1。我可以在循环中执行此操作(非常非常缓慢):
out=NULL
for(i in guuids){
print(i)
m<-filter(data,genome==i)
g<-unique(m$gene)
for(z in guuids){
print(z)
p<-filter(data,genome==z)
p<-filter(p,gene %in% g)
p<-nrow(p)
out=rbind(out,data.frame(i,z,p))
}
}
但这显然不能扩展,肯定有更好的方法吗?
解决方案
table
可以为你数数:
table(df)
gene
genome esaA esaB esaC essA essB essC
A 1 1 2 0 0 0
B 1 0 0 1 1 1
table(df[,c('gene','genome')])
genome
gene A B
esaA 1 1
esaB 1 0
esaC 2 0
essA 0 1
essB 0 1
essC 0 1
返回的对象是一个矩阵,因此您可以简单地测试哪些行/矩阵有多个非零条目。
推荐阅读
- r - 我应该使用什么方法/模块对文本进行分类/分类?
- laravel - Laravel 和图像验证
- c++ - 初始化一个类中的指针数组并在另一个类中检索它
- javascript - 如何在单击按钮时在反应挂钩中清除Interval
- python - 试图用python制作一个聊天机器人(有点)
- d3.js - Oracle APEX 5.0:在 D3 折线图上设置第二个 Y 轴
- c++ - 字符串数组上的 Sizeof 运算符在 C++ 中给出不同的输出
- xamarin.forms - 如何防止 Scrollview 扩展超出其最大可用扩展空间
- python - 请求(由 SSLError 引起(“无法连接到 HTTPS URL,因为 SSL 模块不可用。”)在 Linux 上
- node.js - Express - 使用 .find 和 req.query 返回 null