4

そこで、生体サンプルごとに 1 つずつ、900 個の txt ファイルを含むデータセットをダウンロードしました。私がやりたいことは、このすべてのデータを R の 1 つのデータ マトリックスにマージすることです。

txt_files = list.files()

# read txt files into a list 
for (i in length(txt_files)){
  x <- read.table(file=txt_files[i], sep="\t", header=TRUE, row.name=1)
}

すべてのファイルは 1 つのフォルダーにあるため、list.files()すべてのファイル名を照会するために使用します。次に、各テーブルを個別の R オブジェクト (この場合は x と呼ばれます) に読み込みます。問題は、x ではなく実際のファイルの名前の後に各オブジェクトの名前を付けたいことです。

いくつかのことを試し、インターネットで検索しようとしましたが、まだ解決策が見つかりません。私が見つけた 1 つのことは、lapply を使用してそれらすべてをデータ リストにインポートすることでした。

data_list = lapply(txt_files, read.table, sep = "\t")

ただし、この後はデータ マトリックスが使用できなくなるため、これは適切ではないと思います。誰かが私を助けてくれることを願っています。

4

3 に答える 3

6

接続された (特に連続した) ものに名前を付けることは、一般的に悪いことです。次にやりたいことは、これらのものをループすることです。つまり、ビットを貼り付けて名前を作成することを意味します。その混乱。

可能な限りリストに保存してください。あなたはそれをしました。いくつかの CSV ファイルを作成しました。

> txt_files=c("f1.txt","f2.txt","f3.txt","f4.txt","f5.txt")
> data_list = lapply(txt_files, read.table, sep = ",")
> data_list[[1]]
  V1 V2 V3
1  1  2  3
> data_list[[3]]
  V1 V2 V3
1  1  2  3
2  5  4  3
3  1  2  3

だから今、私はそれらをループしてfor(i in 1:length(txt_files))ファイルの名前を取得することができますtxt_files[i]

> for(i in 1:length(txt_files)){
+ cat("File is ",txt_files[i],"\n")
+ print(summary(data_list[[i]]))
+ }

File is  f1.txt 
       V1          V2          V3   
 Min.   :1   Min.   :2   Min.   :3  
 1st Qu.:1   1st Qu.:2   1st Qu.:3  
 Median :1   Median :2   Median :3  
 Mean   :1   Mean   :2   Mean   :3  
 3rd Qu.:1   3rd Qu.:2   3rd Qu.:3  
 Max.   :1   Max.   :2   Max.   :3  
File is  f2.txt 
       V1          V2          V3   
 Min.   :1   Min.   :2   Min.   :3  
 1st Qu.:1   1st Qu.:2   1st Qu.:3  
 Median :1   Median :2   Median :3  
 Mean   :1   Mean   :2   Mean   :3  
 3rd Qu.:1   3rd Qu.:2   3rd Qu.:3  
 Max.   :1   Max.   :2   Max.   :3  
 ...

[等]

于 2012-12-20T12:22:20.470 に答える
3

次のようなことができます。

names(data_list) <- txt_files

多分:

names(data_list) <- basename(txt_files)

または、sapplyの代わりに使用することもできlapplyます。

于 2012-12-20T12:17:23.403 に答える
1

データを表示せずassignに、次の方法で適用できます。

txt_files = list.files()

# read txt files into a list 
for (i in length(txt_files)){
  x <- read.table(file=txt_files[i], sep="\t", header=TRUE, row.name=1)
  assign(paste(txt_files[i], "name", sep="."), x)
}

同様getに、作成された各オブジェクトをコールバックするために使用できます。

x <- get(paste(txt_files[i], "name", sep="."))
于 2012-12-20T12:30:08.003 に答える