r - 使用 R 循环提取和过滤数据列
问题描述
我是 R 的新手,非常感谢您的帮助。我有一个包含 5 列(fasta 文件和四个菌株)数据和 10 行的数据框。
genome <- data.frame(fasta = rnorm(10), strain1 = rnorm(10), strain2 = rnorm(10), strain3 = rnorm(10), strain4 = rnorm(10))
我想使用循环将数据框分成两列(fasta 和 strainn),这样最后我将拥有 4 个单独的 csv 文件和 2 列数据。在每个文件中,我想过滤应变的列,即只有具有给定最大值(例如 0.5)的行在新数据帧中。到目前为止,我可以使用“function (x) NULL”创建数据帧,但是一旦添加了过滤函数,我就无法过滤或导出数据帧。如何过滤和导出文件?到目前为止,我的代码是。
nstrain <- ncol(genome)-1
dataframes <- lapply(1:nstrain, function(x) NULL)
for (i in 1:nstrain) {
dataframes[[i]] <- data.frame(genome$fasta, genome[i+1])
}
dataframes
我想最终得到这样的数据框
> dataframes
[[1]]
genome.fasta strain1
1 1.04954754 0.2358870
2 0.20305724 0.4763678
3 1.04875114 0.3216317
4 0.05839317 0.2899819
5 0.54135630 0.0100254
[[2]]
genome.fasta strain2
1 0.20305724 0.3915370
2 1.04875114 0.3294302
3 -0.03065096 0.4339920
4 0.70639127 0.3092204
5 0.54135630 0.2708824
6 0.65988727 0.4862548
[[3]]
genome.fasta strain3
1 0.44547248 0.3196918
2 1.04954754 0.3320331
3 0.54135630 0.3039161
[[4]]
genome.fasta strain4
1 0.44547248 0.21858664
2 -0.03065096 0.23830566
您的帮助将不胜感激。谢谢你。
解决方案
如果您想为每个菌株编写单独的 csv,您可以使用lapply
:
lapply(seq_along(genome[-1]), function(x) {
write.csv(subset(cbind(genome[1], genome[x+1]), genome[[x + 1]] < 0.6),
paste0('strain', x, '.csv'), row.names = FALSE)
})
这将在您的工作目录中为您提供文件等'strain1.csv'
。'strain2.csv'
如果您想要返回数据框列表,您可以删除该write.csv
部分并使用
data <- lapply(seq_along(genome[-1]),function(x)
subset(cbind(genome[1], genome[x+1]), genome[[x + 1]] < 0.6))
推荐阅读
- qt - Qt Widgets 针对多种平台和语言进行缩放
- javascript - java - 如何使用spring boot将回调方法从JavaScript传递到java后端?
- mysql - 如何在我的 django 应用程序中创建 model.py 以实现我的需要?
- mysql - 无法在mysql中创建表
- c# - 如何在 C# 中为自动获取更新事件的 ics 类型文件创建链接
- python - 屏幕关闭时 Python 脚本停止运行
- rxjs - RXJS:自适应超时
- android - 屏幕旋转后,无法从 AsyncTask 以编程方式关闭 BottomSheetDialogFragment
- android - Firebase Deep Link 打开的是 Play 商店而不是 App
- django - 在 amazon s3 中压缩字体文件