2017-01-10 16 views
-1

データフレームのリストがあります。データフレームのリスト内で1つの列をグループ化する方法

各データフレームはpersonによって命名され、各データフレームにはイベント(行)が含まれます。各イベントの列は、「イベントの表示」および「生検の数」と呼ばれます。私は、各人が各適応症に対してどのくらい多くの生検を行うかを示す要約データフレーム(またはマトリックス?)を作成したいと考えています。

List of 3 
$ :'data.frame': 3 obs. of 2 variables: 
    ..$ Indication: Factor w/ 2 levels "AbdoPain","Vomiting": 1 2 1 
    ..$ NumOfBx : num [1:3] 2 3 1 
$ :'data.frame': 4 obs. of 2 variables: 
    ..$ Indication: Factor w/ 3 levels "AbdoPain","Anaemia",..: 2 2 1 3 
    ..$ NumOfBx : num [1:4] 12 23 1 5 
$ :'data.frame': 4 obs. of 2 variables: 
    ..$ Indication: Factor w/ 3 levels "AbdoPain","Anaemia",..: 2 1 3 3 
    ..$ NumOfBx : num [1:4] 1 2 3 7 

結果:

  dfMrBen  dfJohn  dfStuart 
Abdo pain 
Vomiting 
Anaemia 

私は、これは、分割適用コンバイン問題になりそうだと思ったが、私は上記のように要約を取得するために結合する方法がわかりません。現時点では、私は持っています:

ReportOp<-function(x){ 
#To extract the dataframe name 
theName<-x 
#To extract the dataframe data 
x<-data.frame(Dxlst[[x]]) 
grp<-x%>% group_by(Indication %>% summarise(mean=mean(NumberOfBx) 
} 
lapply(names(Dxlst,ReportOp) 

しかし、これはちょうど各データフレームの概要を私に与えます。基本的にどのように組み合わせてデータフレームを追加し、意図した結果を得るか?

+1

。 –

答えて

1

最初の一つの大きなデータフレームのデータを組み合わせたり

do.call(rbind, Dxlst) 

又は第一そうのように一緒にそれらをそれぞれリストにidを追加し、rbindで要約した後、次の操作を行います。

Dxlst <- lapply(1:length(Dxlst), 
    function(x) cbind(Dxlst[[x]], 
    id = rep(x,nrow(Dxlst[[x]])))) 

do.call(rbind, Dxlst) 
+0

または、実際には、私はこれを最初に分割してはならないかもしれません。私は物事を複雑にしています:)あなたの答えは機能します。ありがとう –

0

ない、まさにあなたは探している。しかしそれは近いです。また、データフレームを結合して、よりシンプルな要約を作成する必要があります。

データを作成します -

df1=data.frame(Indication=as.factor(sample(c(0,1), 10, replace = T)), Bx=sample(1:10, 10, replace = T)) 
df2=data.frame(Indication=as.factor(sample(c(0,1,2), 10, replace = T)), Bx=sample(1:10, 10, replace = T)) 
l=list(df1,df2) 

その後、

l=lapply(l, function(x) aggregate(Bx ~ Indication, x, sum)) 
m=max(sapply(l, nrow)) 
n=lapply(l, function(x){ x <- x[seq_len(m),]; row.names(x) <- NULL; x}) 
do.call('cbind',n) 

私はのような出力を得る: `データセットのdput`を与えてください

Indication Bx Indication Bx 
1   0 18   0 9 
2   1 28   1 35 
3  <NA> NA   2 18 
関連する問題