1

データフレーム、合計、平均コマンドの説明が必要です。以下のコードを操作すると、データファイルのリストを取得できますPreplist。それでも、説明が必要なコマンドは、いくつかのエラーのために機能しません。

私の推測では、ロードするデータにはデータフレームがなく、各データファイルの番号のリストだけが含まれています。各データファイルを合計または平均するには、データフレームが必要です。(行数を確認すると、何もありませんが、NULLです)。

ロードされたデータ(200x200マトリックス)のデータフレームを作成する必要があると思います。また、元のデータでは最初の行と列を無視する必要があります。

これは私のコードです:

Prepfiles <- list.files(pattern=".csv")
Preplist <- lapply(Prepfiles, read.table, sep = '\t', 
                  na.string = '', header = TRUE, skip=1)
bigPreplist <- do.call(rbind, Preplist)

データを一度にロードし、データをプロットする必要があります(3つのデータファイルごとに合計してプロットします)。しかし、コマンドを実行するのに問題がsum()ありmean()ますPreplist[1:24]

私が使用しているのは、すべて200x200マトリックスの数値です。24個のデータファイルがあります。また、データをロードするときに200 x 200のマトリックス形式を保持したいのですが、コーディングでは、チェックすると行数がありませんnrow(Preplist[1])。データをロードするときに同じデータフレームを保持することは可能ですか?または、新しいデータフレームを作成する必要がありますか?

sumコマンドとmeanコマンドで発生するエラーは次のとおりです。

> nrow(Preplist)
NULL
> sum(Preplist[1])
Error in sum(Preplist[1]) : invalid 'type' (list) of argument
> mean(Preplist[1])
[1] NA
Warning message:
In mean.default(Preplist[1]) :
  argument is not numeric or logical: returning NA
4

1 に答える 1

2

[ここでは、と[[(同じページ)のヘルプを確認すると便利です。

関連するセクションを引用するにprepListは(リストとして)

再帰的な(リストのような)オブジェクト

[によるインデックス付けは、アトミックベクトルに似ており、指定された要素のリストを選択します。

[[と$の両方が、リストの1つの要素を選択します。主な違いは、$は計算されたインデックスを許可しないのに対し、[[は許可することです。x $ nameは、x [["name"、exact=FALSE]]と同等です。また、[[の部分一致動作は、正確な引数を使用して制御できます。

それで、

prepList[1]

長さ1のリストを選択します。このリストの最初の要素はdata.frame

preplist[[1]] 

prepList必要なdata.frameである最初の要素を選択します。

そうは言っても、あなたが本当にaの平均または合計を取りたいかどうかはわかりません。あなたは、data.frameこれらがあなたが望むものを返すことを確認したいと思うでしょう。

例えば

prepList <- list(data.frame(a=1:5,b=2:6), data.frame(a=2:6,b=1:5))

# this will give a warning
mean(prepList[[1]])

## a b 
## 3 4 
## Warning message:
## mean(<data.frame>) is deprecated.
## Use colMeans() or sapply(*, mean) instead. 


## this will give a single number

sum(prepList[[1]])

## 35

prepList各列に含まれる、または各列の合計である各data.frameの列平均が必要な場合は、、、colMeansまたはwithmeanscolSumsのネストされたバージョンを使用lapplyします。

eg 
library(data.table)
rbindlist(lapply(prepList, function(x) lapply(x, mean)))

##    a b
## 1: 3 4
## 2: 4 3

または使用plyrしてldply

library(plyr)
 ldply(prepList, function(x) {sapply(x, mean)})

または数値列に制限する

plyrを使用する

ldply(prepList,  numcolwise(mean))

フィルタを使用する

rbindlist(lapply(prepList, function(x) lapply(Filter(is.numeric,x), mean)))
于 2013-02-26T22:59:46.217 に答える