-2

Rに複数のデータをインポートして、各ファイルの3番目の列の平均を求めます。以下に例を示します。

Rに複数のテキストファイルをインポートするからRamnathのソリューションを使用して、Rに複数のファイルをインポートし、事前に定義されたリストからそれらに名前を割り当てました。これまでに使用したコードは次のとおりです。

#Import mulitple text using following code: files with extension *.dat
txt_files =list.files(pattern='\\.dat$')
data_list=lapply(txt_files,read.table,sep="\t",header=T)

ニコの答えを使用して、Rリストからデータフレームへのデータフレームへの変更

  # Change the list to dataframe
    hello <- as.data.frame(do.call(rbind,data_list))
    dim(hello)

# Using 12 files I got the following information
> dim(hello)
[1] 58536     1

各ファイルには4878行の数があります。これは私が探しているものではありません。上記のコードは、すべてのデータを行に基づいて1つのデータフレームにマージしました。

列ごとに、各ファイルから3番目の列の平均を計算できるようにしたいです。各ファイルの3番目の列を使用して、平均の配列を見つけたいと思います。

私が欲しいもののサンプルは次のとおりです。

ファイル1

Lat Long Value
10 12  15
12 13  16

ファイル2

 Lat Long Value
    10  12 11
    12 13  15  

最終ファイル

Lat Long  Value
10 12  13
12 13  15.5

最終的なファイルでわかるように、最初の2つの列は同じですが、異なるのは2つのファイルの2つの値の平均である3番目の列だけです。そのため、上記のように、データを使用して最終ファイルと同様のデータフレームに変更したいと思います。

4

1 に答える 1

2

座標でグループ化

最終的なリストを特定の順序にする必要がなく、同じ座標を持つ異なる行がない限り、行ごとに組み合わせても問題ありません。その場合、単純に共通の座標を使用して行をグループ化し、次のようにそれらを集約できます。

aggregate(Value ~ Lat + Lon, hello, mean)

行番号でグループ化

一方、座標が重複している場合、または最終結果をすべての入力と同じ順序にしたい場合は、Valueそれぞれから列を抽出data.frameして、それらをマトリックスに結合する必要があります。次に、各行列行の平均を計算し、それらの平均を任意の入力データフレームの2つの座標列と組み合わせることができます。このアプローチ全体は、入力データ行の順序に大きく依存します。つまり、特定の場所の行番号がすべてのファイルで同じであることに依存します。次のように実装できます。

mean_values <- apply(do.call(cbind, lapply(data_list, function(df) df$Value)), 1, mean)
cbind(data_list[[1]][1:2], Value=mean_values)

これを試してみる

これが私のシステムでどのように見えるかのセッション例です:

> data_list <- list(File.1=data.frame(Lat=c(10,12),Lon=c(12,13),Value=c(15,16)),
                    File.2=data.frame(Lat=c(10,12),Lon=c(12,13),Value=c(11,15)))
> hello <- as.data.frame(do.call(rbind,data_list))
> dim(hello)
[1] 4 3
> str(hello)
'data.frame':   4 obs. of  3 variables:
 $ Lat  : num  10 12 10 12
 $ Lon  : num  12 13 12 13
 $ Value: num  15 16 11 15
> aggregate(Value ~ Lat + Lon, hello, mean)
  Lat Lon Value
1  10  12  13.0
2  12  13  15.5
> value_matrix <- do.call(cbind, lapply(data_list, function(df) df$Value))
> value_matrix
     File.1 File.2
[1,]     15     11
[2,]     16     15
> mean_values <- apply(value_matrix, 1, mean)
> cbind(data_list[[1]][1:2], Value=mean_values)
  Lat Lon Value
1  10  12  13.0
2  12  13  15.5

たった1列?

入力ファイルの読み取りから得られる列は1つだけなので、出力に応じて、またはをdim使用してそのデータフレームを調査し、何が問題だったかを確認する必要があります。ほとんどの場合、列はタブで区切られていませんが、コンマやスペースなどで区切られています。を指定しない場合は、スペースやタブのシーケンスが列区切り文字として使用されることに注意してください。詳細については、ドキュメントをお読みください。headstrsepread.table

于 2013-02-04T06:36:42.377 に答える