2017-10-12 4 views
0

データフレームに、草食系寄生虫resultの月間データmonthに、レベル "Hymenoptera"または "Diptera"の寄生虫の順序 'psitorder' resultは、草食動物の草食動物の場合は「p」、草食動物が大人になった場合は「a」、草食動物が捕らわれてデータが存在しません。データをフィルタリングし、除外されたデータに依存する出力を持つサブセットを計算する

df<-data.frame(month= c(rep(1, each=8), rep(2, each=6), 
     rep(3, each=6)),result= c(rep("p",each=3),rep("a",each=3) , 
     rep("",each=2),rep("p",each=3),rep("a",each=2), 
     rep("",each=1),rep("a",each=3), rep("",each=3)), 
     psitorder= c(rep("Hymenoptera",each=2),rep("Diptera",each=1), 
     rep("",each=5),rep("Hymenoptera",each=1),rep("Diptera",each=3), 
     rep("",each=2),rep("",each=6))) 

私はpsitorderのレベルごとに個別に毎月のサブセットのためのパーセントの寄生psit_freqを計算する二つの別々のデータフレームを必要としています。

私が試してみました:

Hymenoptera_output<- 
    df 
    filter(psitorder!= "Diptera")%>% 
    group_by(continuous_month)%>% 
    summarise(psit_freq = sum(result == "psit")/sum(result== 
"adult",result == "psit")) 

Diptera_output<- 
    df 
    filter(psitorder!= "Hymenoptera")%>% 
    group_by(continuous_month)%>% 
    summarise(psit_freq = sum(result == "psit")/sum(result== 
"adult",result == "psit")) 

私は正しい出力を得ることはありません。出力は、psit_freqを正しく計算するために必要な非梅毒または双翅目のデータを除外しています。

私は次のように表示されるように出力を必要とする:

Hymenoptera_output<- data.frame(month= c(1,2,3), psit_freq= c(2/6, 
1/5, 0)) 
Diptera_output<- data.frame(month= c(1,2,3), psit_freq= c(1/6, 
3/5, 0)) 

Hymenoptera_output 

# month psit_freq 
#1  1 0.3333333 
#2  2 0.2000000 
#3  3 0.0000000 

Diptera_output 

# month psit_freq 
#1  1 0.1666667 
#2  2 0.6000000 
#3  3 0.0000000 

答えて

1

はあなたが必要とするようだ:

df %>% 
    group_by(month) %>% 
    summarise(hym_freq = sum(psitorder == 'Hymenoptera')/sum(result %in% c('p', 'a')), 
       dip_freq = sum(psitorder == 'Diptera')/sum(result %in% c('p', 'a'))) 

# A tibble: 3 x 3 
# month hym_freq dip_freq 
# <dbl>  <dbl>  <dbl> 
#1  1 0.3333333 0.1666667 
#2  2 0.2000000 0.6000000 
#3  3 0.0000000 0.0000000 
+1

これは非常に効率的に動作しますが、よろしくお願いします。 – Danielle

+0

実際に私の元のデータフレームでは、 'psitorder'変数は、その変数を別の列に条件付きの変数にした結果、NAsを持ちます。 DipteraまたはHymenopteraとして分類されていないすべてのデータは、NA指定を与えられた。私は、このコラムのNAsが、私のアウトプットが私が期待するものではない理由かもしれないと思う。あなたの方法を考えれば、私の出力は、ほとんどのエントリのNAを報告しています。どのようにこの問題を解決する上での任意のアイデア? – Danielle

+0

'sum'に' na.rm = T'を使うことができます。例えば、 'sum(psitorder == 'Hymenoptera'、na.rm = T)'は、他の* sumsと同様です。 – Psidom

関連する問題