1

リスト構文に関する別の質問 (私はゆっくりと学んでいると思います)。次の簡略化された形式のデータがあります。

a=c(1,2,3,4,5,NA,NA)
b=c(6,7,8,9,10,NA,NA)
c=c(6,5,3,NA,NA,NA,NA)
d=c(NA,NA,NA,NA,NA,NA,NA)
A=data.frame(a,b,c,d)
B=data.frame(c,b,a,d)
C=data.frame(d,c,b,a)
mylist=list(A,B,C)
bins=c(0,2,4,6,8,10)

定義されたビンに従ってデータフレームのリストの各列をビン化し、各データフレームの各ビンの平均数を返したいと思います。出力がどのような形式であるか、データフレームまたはベクトルのリストであるかは特に気にしません。したがって、この例では:

hist(a,bins, plot= FALSE)
hist(b,bins, plot= FALSE)
hist(c,bins, plot= FALSE)

数を与える

$counts
[1] 2 2 1 0 0
$counts
[1] 0 0 1 2 2
$counts
[1] 0 1 2 0 0

それぞれ。

私はそれを行う方法を知りませんが、 d には NA のみが含まれているため、返してもらいたいです:

$counts
[1] 0 0 0 0 0

(各NAを0にすると思います)。

したがって、A (a、b、c、d を含む) の平均は次のようになります。

$counts
[1] 2 2 1 0 0 +
$counts
[1] 0 0 1 2 2 +
$counts
[1] 0 1 2 0 0 +
$counts
[1] 0 0 0 0 0 +

=   2 3 4 2 2 / 4

=   0.5 0.75 1 0.5 0.5

これは、データフレームAの望ましい出力になります。ベクトルの最終リストには、BとCに関連するベクトルも含まれますが、最初のリストの各データフレームの列のデータフレームも問題ありません。ビンの中点に対してこれらの平均カウントをプロットします。

私の説明が、私がやろうとしていることを理解するのに十分であることを願っています。

4

1 に答える 1

2

コメントで述べたように、d数値を作成すると、トラブルシューティングしている単純なケースが解決されます。データフレーム全体で計算したい平均を取得するには、次を使用applyしてからいくつか取得しますrowMeans

rowMeans(apply(A,2,function(a) hist(a,bins,plot=FALSE)$counts))
#[1] 0.50 0.75 1.00 0.50 0.50

lapplyデータフレームのリストに対してこれを行うには、 (またはsapply)にネストするだけです。

> lapply(mylist,function(X)
      rowMeans(apply(X,2,function(a) hist(a,bins,plot=FALSE)$counts)))
[[1]]
[1] 0.50 0.75 1.00 0.50 0.50

[[2]]
[1] 0.50 0.75 1.00 0.50 0.50

[[3]]
[1] 0.50 0.75 1.00 0.50 0.50

(注:どうやらあなたのdfsはすべて同じ出力を生成するため、これは正しく機能していないように見えますが、実際には機能しています。)

于 2013-08-01T13:24:20.650 に答える