【发布时间】:2021-10-26 02:04:19
【问题描述】:
我有大量的 csv 文件。(超过 500 个 csv 文件) 目前我必须手动提取 1 x 1 csv 的特定单元格。并根据类别制作一个新的数据框。 下面是我导入数据、为每个 csv 特定单元格信息创建变量并创建新数据框的代码。
#Import the csv and create a list
tempx <- list.files(pattern ="*.csv")
mylist <- lapply(tempx,read_csv)
逐一创建变量,用于提取每个csv.file中的特定数据并删除零值
file1 <- mylist[[1]][132:167,4][apply(mylist[[1]][132:167,4], 1,
function(row) all(row !=0 )), ]
file2 <- mylist[[2][132:167,4][apply(mylist[[2][132:167,4], 1,
function(row) all(row !=0 )), ]
file3 <- mylist[[3]][132:167,4][apply(mylist[[3]][132:167,4], 1,
function(row) all(row !=0 )), ]
file4 <- mylist[[3]][132:167,4][apply(mylist[[3]][132:167,4], 1,
function(row) all(row !=0 )), ]
file5 <- mylist[[3]][132:167,4][apply(mylist[[3]][132:167,4], 1,
function(row) all(row !=0 )), ]
创建一个不等长的数据框。
table <- qpcR:::cbind.na((file1,file3,file4,file5)
colnames(table) <- c("Name1" ,"Name2")
table1 <- as.data.frame(lapply(table ,as.numeric))
上面的代码是我只能做的。手动创建这些变量file1 到file500 并根据该csv文件的第17行,第4列将变量1by1插入table数据框列。
(file105 示例:my list[[105]][17,4].)
是否可以使用if else 或case_when 将行添加到table1(现有数据框或创建新数据框)基于
mylist[[1]][17,4] 或 [1][17,4] 直到 [[500]][17,4] 等。
(最后,所有 500 个 csv 文件的数据框将是 10+ 列。)
就像if[[1]][17,4]="Name1",在[[1]][132:167,4] 中插入不为零值的table 列“Name1”。
图像 1 和图像 2 是一个 csv。
1
[数字 1 是我想成为列名的数据mylist[[1]][17,4]
2
[数字 2 是我想成为行mylist[[1]][132:167,4] 并根据mylist[[1]][17,4] 插入正确列的数据,不为零。`
【问题讨论】:
-
filelist <- lapply(mylist, function(x) { x[132:167,4][apply(x[132:167,4], 1, function(row) all(row !=0 )), ] })应该可以在列表中创建所有file*对象。将filelist <- lapply(mylist, function(x) { x[132:167,4][rowSums(x[132:167,4] == 0) == 0, ] })替换为apply可能会更简洁一些。 -
为了帮助您解决实际问题,如果有一个可复制/可粘贴的可重现示例并带有一些示例数据来说明,那就太好了。 2 或 3 个小样本数据框应该足以说明问题。
-
您可以通过循环创建这些文件来自动创建file1、file2、file3等。首先,创建您的清单:
outlist <- vector(mode = "list", length = length(files)),然后填写:for (i in length(mylist)) {outlist[[i]] <- mylist[[i]][132:167,4][apply(mylist[[i]][132:167,4], 1, function(row) all(row !=0 )), ]}。然后,您可以绑定列表:table <- qpcR:::cbind.na((outlist)。但是如果没有可重现的例子,就很难确定它是否能正常工作。 -
请查看最后2句上传4张图片供您参考。
标签: r dataframe csv if-statement