2017-06-09 3 views
0

reshape2とその機能を初めて使用しました。私は、データテーブルを持っている、D、Iは平均値が各年のすべてのステーションを介してそれぞれの種のためのカウントを取得するために、年間でのステーションで種数の集計データにしようとしていたために:Rのdcastを使用して不足しているエントリの平均で集約する

d<-data.table(station=c(1,1,4,3),year=c(2000,2000,2001,2000), 
    species=c("cat","dog","dog","owl"),abundance=c(10,20,30,10)) 
d 

> station year species abundance 
1:  1 2000  cat  10 
2:  1 2000  dog  20 
3:  4 2001  dog  30 
4:  3 2000  owl  10 

私はdcastを使用します豊富に集約する、しかし私は得るように見えることはNaNを無視合計ではなく平均値よりも、生成された結果です:私が欲しいもの

dm<-dcast(d, year~ species,value.var="abundance",fun.aggregate = mean) 
dm 
> year cat dog owl 
1: 2000 10 20 10 
2: 2001 NaN 30 NaN 

は次のとおりです。argmentフィルを使用して

> year cat dog owl 
1: 2000 3.33 6.67 3.33 
2: 2001 0  30 0 

=ただ結果NaNが0に置き換えられます。

私はどんなアドバイスにも大変感謝しています。私はドキュメントを読んでチュートリアルを探しましたが、これを解決することはできませんでした。

答えて

0

「平均」という用語の使用は、特に標準的ではありません。私はmean_abundanceと呼ばれる新しい変数を作成することが最良の解決策になると思います。

d[, mean_abundance := abundance/length(abundance), by = year] 

dm <- dcast(d, year~ species,value.var="mean_abundance") 
dm[is.na(dm)] <- 0 
0

我々はtidyverse

library(tidyverse) 
d %>% 
    group_by(year) %>% 
    mutate(mean_abundance = abundance/n()) %>% 
    spread(species, mean_abundance, fill = 0) 
でこれを行うことができます
関連する問題