由于我不能提供示例数据,这里有两个小文本文件,代表我的两个输入文件的前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"列中因子的出现次数,并且
-
根据计数构建矩阵,其中行=每个数据帧中"sbjct"和columns =出现的因子级别 .
对于列表中的每个数据帧,应根据原始列表中的原始数据框创建一个具有两列(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
但它似乎无法应用于数据帧列表 .
1 回答
向每个数据集添加一列,作为指标[让Ndata命名]特定观察来自该数据集 . 现在rbind所有这些数据集 .
现在当你创建一个sbjct X Ndata的交叉表时,你将得到你正在寻找的矩阵 .
这里有一些代码要澄清:
ct看起来像这样: