问题描述
我不确定如何准确地表达标题。本质上,我希望从这个输入开始(让我们称这个数据框为 sampledata)
sample1 | sample2 | sample3 | sample4 | sample5 | 物种 |
---|---|---|---|---|---|
5 | 2 | 3 | 5 | 0 | A。拟南芥 |
2 | 1 | 4 | 6 | 1 | E。大肠杆菌 |
到这个想要的输出
sample1 | 物种 |
---|---|
5 | A。拟南芥 |
2 | E。大肠杆菌 |
sample2 | 物种 |
---|---|
2 | A。拟南芥 |
1 | E。大肠杆菌 |
... 并为每个表继续这个,所以我会有 5 个单独的数据帧。在我的脑海里,我会通过做 sample1df 然后做 sample1df 来做到这一点,然后对每个样本重复。但是,我有一种预感,这可以以更有效的方式完成,这将使我的脚本更加干净。是否可以编写某种 for 循环来执行此操作?我还是 R 的新手,希望得到任何帮助:)
解决方法
如果你的数据框是 df 那么
dframes <- lapply(1:5,function(x) df[,c(x,6)])
或概括:
ncols <- ncol(df)
n <- ncols - 1
dframes <- lapply(1:n,ncols)])
,
我们可以循环遍历 'sample' 列名,select
该列以及 loop
中的 'species' 并将输出存储在 list
中
nm1 <- grep('sample',names(df1),value = TRUE)
lst1 <- lapply(nm1,function(nm) df1[c(nm1','species')])
注意:即使它在任何位置,这也会选取“样本”列。所以,泛化实际上发生在这里
,非常基础 基R子集并选择
sample1df <- subset(sampledata,select = c(1,6))
sample2df <- subset(sampledata,5))
sample3df <- subset(sampledata,4))
sample4df <- subset(sampledata,3))
sample5df <- subset(sampledata,2))