删除包含全局环境中多个大型数据框的NA的特定列的行

时间:2019-04-25 14:31:58

标签: r excel dataframe

我有大量的CVS文件,需要通过删除特定列中不适用的所有行来整理。因此,我想知道是否有可能编写一些可以满足以下条件的R代码,而不是在Excel中手动打开每个代码:

  1. 将文件夹中的所有CSV文件加载到R
  2. 分别删除每个数据文件在特定列(“错误”)中包含n / a的所有行
  3. 将所有剩余的n / a更改为“”
  4. 将整理后的数据另存为单独的Excel文件(保留原始名称,最后保留一点点,以便我可以从已处理的文件中分辨出RAW文件)

我可以对单个文件执行上述步骤,但是我对扩展自己的代码以对多个CSV文件执行相同的操作不太满意。

如果我一次处理一个文件,这是我目前拥有的:

setwd('#folderlocation')
df <- read.csv("#filename",
           header=TRUE)
working <- df[!is.na(df$Error),]
working <- sapply(working, as.character)
working[is.na(working)] <- ""
library(xlsx)
write.xlsx(working,"test.xlsx")

我已设法使用以下代码导入文件列表:

temp=list.files(pattern=".CSV")
for(i in 1:length(temp)){assign(temp[i],read.csv(temp[i]))}

但对于我从那里继续前进的方式感到困惑。

我得到的最终结果是每个文件,一旦使用代码进行处理,“错误”列中将没有任何空白行,并将被另存为Excel文件。 我决不想要合并数据帧,因为试图解开哪些数据属于哪个文件会太混乱。

感谢您的帮助:-)

1 个答案:

答案 0 :(得分:0)

您的Rscript myscript.R:

library(xlsx)
args = commandArgs(trailingOnly=TRUE)
df <- read.csv(args[1], header=TRUE)
working <- df[!is.na(df$Error),]
working <- sapply(working, as.character)
working[is.na(working)] <- ""
write.xlsx(working,paste(args[1], "test.xlsx", sep="_")

现在,如果您正在运行Unix系统,则可以打开终端并运行以下命令来为文件夹.CSV中所有以“ /folder/with/input/data”结尾的文件启动for循环:

bash
cd /folder/with/input/data
for FILE in *.CSV
 do
  Rscript myscript.R $FILE
 done