

たびたび初歩的な質問で申し訳ありません。  
下記質問では大変お世話になりました。  
[R言語におけるデータフレームから欠損値を除去する方法、欠損値しかない列の除去（もしくは0への変換）](https://ja.stackoverflow.com/questions/36141/r%E8%A8%80%E8%AA%9E%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%8B%E3%82%89%E6%AC%A0%E6%90%8D%E5%80%A4%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-%E6%AC%A0%E6%90%8D%E5%80%A4%E3%81%97%E3%81%8B%E3%81%AA%E3%81%84%E5%88%97%E3%81%AE%E9%99%A4%E5%8E%BB-%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF0%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B)

現在、csv作成→Rへ入力→Mann-whitney計算→csv出力を、様々なご指導を元に下記にように実行しています。

[code]

    Data <- read.csv("sample.csv", header=TRUE)
    Data_long <- gather(Data, key = fac, value = value, factor_key = TRUE)
    Data_long_rmNA <- drop_na(Data_long, value)
    temp <- with(Data_long_rmNA, pairwise.wilcox.test(value, fac, exact =      FALSE, p.adjust.method = "none"))$p.value
    write.csv(temp, file = "sample_result.csv", quote = F)
    
[/code]

現状、満足していますが、入力するcsvファイルがたくさんあるため、sampleのところにいちいち名前を入力するのが面倒なため、下記にようにしてみました。

[code]

    i <- "sample"
    Data <- read.csv(sprintf("%s.csv", i), header=TRUE)
    Data_long <- gather(Data, key = fac, value = value, factor_key = TRUE)
    Data_long_rmNA <- drop_na(Data_long, value)
    temp <- with(Data_long_rmNA, pairwise.wilcox.test(value, fac, exact = FALSE, p.adjust.method = "none"))$p.value
    write.csv(temp, file = sprintf("%s_result.csv", i), quote = F)
    
[/code]

ところで、さらにこれを自動化することはできないでしょうか？For文で書けばできるのではと思っています。しかし、入力するcsvファイルの名前が規則性がないもので、困っています。たぶんファイル名が1,
2, 3...とかならFor文でできそうなのですが。。。

例えば、ファイル名が、A4fg, Brtg, Huji, CVYh...とあった場合に、

[code]

    Data <- (A4fg, Brtg, Huji, CVYh...)
    
[/code]

のようなコードを最初に入れて、これを順々に実行していく、というコードを書きたいと考えています。もちろん出力時はそのファイル名_result.csvとして出力できれば、助かります。

ご指導のほど、よろしくお願いいたします。


CC BY-SA 3.0
2017-08-30T02:51:14.660
37592
2022-06-17T06:06:15.563
24217
question
r
R言語におけるループでの複数のファイルの入力および処理


Hope this helps!(お役に立てれば！)

[code]

    # setwd("<absolute path of directory having all csv files>")
    setwd("<対象になる全てのCSVファイルが入ったディレクトリへの絶対パス>")
    #上記のディレクトリ内の全てのCSVファイルを列挙
    #list all csv files in above directory
    files <- list.files(pattern = "\\.csv$")
    
    for (f in 1:length(files)){
      i <- gsub("(.*).csv","\\1",files[f])
      # <your code>
      <あなたのコード>
    }
    
[/code]


CC BY-SA 4.0
2017-08-30T07:45:02.770
37607
2018-11-19T12:33:39.420
2018-11-19T12:33:39.420
30827
37592
answer