由于我无法提供示例数据,因此这里有两个小文本文件,代表我的两个输入文件的前5行:
https://www.dropbox.com/sh/s0rmi2zotb3dx3o/AAAq0G3LbOokfN8MrYf7jLofa?dl=0
我将工作目录中的所有文本文件读入一个列表,在第三列中通过数字截止值剪切了一些列set new names和子集:
all.files <- list.files(pattern = ".*.txt")
data.list <- lapply(all.files, function(x)read.table(x, sep="\t"))
names(data.list) <- all.files
data.list <- lapply(data.list, function(x) x[,1:3])
new.names<-c("query", "sbjct", "ident")
data.list <- lapply(data.list, setNames, new.names)
new.list <- lapply(data.list, function(x) subset(x, ident>99))
我最终会得到一个数据帧列表,每个数据帧由三列组成。
现在,我想
对于列表中的每个数据帧,应根据原始列表中的原始数据框创建一个具有两列(sbjct / counts)的新对象。最后,所有新对象都应该与cbind合并(例如),空单元格(缺少数据)应该用零填充,从而产生“sbjct x counts”矩阵。
例如,如果我有一个数据帧,dplyr会帮我这样:
library(dplyr)
some.object <- some.dataframe %>%
group_by(sbjct) %>%
summarise(counts = length(sbjct))
>some.object
Source: local data frame [5 x 2]
sbjct counts
1 AB619702.1.1454 1
2 EU287121.1.1497 1
3 HM062118.1.1478 1
4 KC437137.1.1283 1
5 Yq2He155 1
但它似乎无法应用于数据帧列表。
答案 0 :(得分:1)
为每个数据集添加一列,作为指标[让Ndata命名]特定观察来自该数据集。现在rbind所有这些数据集。
现在当你制作sbjct X Ndata的交叉表时,你将获得你正在寻找的矩阵。
这里有一些代码要澄清:
t=c("a","b","c","d","e","f")
set.seed(10)
d1=data.frame(sbjt=sample(t,sample(20,1),rep=T))
d2=data.frame(sbjt=sample(t,sample(20,1),rep=T))
d3=data.frame(sbjt=sample(t,sample(20,1),rep=T))
d1$Ndata=rep("d1",nrow(d1))
d2$Ndata=rep("d2",nrow(d2))
d3$Ndata=rep("d3",nrow(d3))
all=rbind(d1,d2,d3)
ct=table(all$sbjt,all$Ndata)
ct看起来像这样:
> ct
d1 d2 d3
a 1 0 0
b 4 0 1
c 2 2 1
d 3 1 0
e 1 0 0
>