2016-07-26 10 views
2

dplyrsummariseのユーザー定義関数を使用しようとしています。私が働いている データセットはdownloaded hereなると、次のコードを使用して使用するために準備することができます:ここでdplyrのRユーザー定義関数の集計

raw_data <- read.csv("Output/FluxN2O.csv", stringsAsFactors = FALSE) 
test_data <- raw_data %>% mutate(Chamber = as.factor(Chamber), Treatment = as.factor(Treatment. Time = as.POSIXct(Time, format = "%Y-%m-%d %H:%M:%S"))) 

が要因Chamberのレベルごとにhead()

> head(test_data) 
      Time Chamber_closed   Slope R_Squared Chamber Treatment Flux_N2O Time_relative Time_cumulative 
1 2016-05-03 00:08:21   10.23 8.873843e-07 0.6941540  10  AN 0.7567335   0.0    0.0 
2 2016-05-03 06:10:21   12.24 -5.540907e-06 0.7728001  12   U -4.7251117   362.0   362.0 
3 2016-05-03 06:42:21   10.24 -5.260463e-06 0.9583473  10  AN -4.4859581   32.0   394.0 
4 2016-05-03 07:12:21   9.23 -5.320429e-06 0.7602987  9  IU -4.5370951   30.0   424.0 
5 2016-05-03 07:42:21   7.23 3.135043e-06 0.7012436  7   U 2.6734669   30.0   454.0 
6 2016-05-03 20:10:15   5.24 5.215290e-06 0.7508935  5  AN 4.4474364   747.9   1201.9 

ですが、私は計算しますx = Time_cumulativeおよびy = Flux_n2Oのときの曲線下面積。

私はbyコールに渡された次の関数使用してこの操作を行うことができます。しかし、私はやるべきこと、さらに、データ処理があるとしてsummarise出力を使用して最も簡単になりますどのdpylrを使用することを好むだろう

cum_ems_func <- function(x) {last(cumtrapz(x$Time_cumulative, x$Flux_N2O))} 
by(test_data, test_data$Chamber, cum_ems_func) 

を。

私はdplyrアプローチを使用しようとすると

test_data %>% 
group_by(Chamber) %>% 
summarise(cumulative_emmission = last(cumtrapz(Time_cumulative, Flux_N2O))) 

私は次のエラーを取得:私もその結果をまとめたもの呼び出し内でユーザー定義関数cums_ems_funcを使用してみましたが

Error: Unsupported vector type language 

をエラー:

test_data %>% 
group_by(Chamber) %>% 
summarise(cumulative_emmission = cum_ems_func()) 
Error: argument "x" is missing, with no default 

これと一緒に正しい方向にしてください?

+0

仕事をする必要があり、最後のアプローチは機能にいくつかのデータを渡すためにあなたを必要とし、あなたの質問 –

+0

に 'dput(ヘッド(TEST_DATAを))'追加してくださいしかし、あなたが定義した方法では、 '.'で表されるdata.frameのグループ全体が必要になります。必要に応じて、2つの変数を取るように関数を再定義することができるので、列名を渡すことができます。以前のバージョンがより一般的で、私が知る限りで動作するはずです。 'cumtrapz'関数とは何ですか?そのパラメータは何ですか? – alistaire

+0

@alistaire 'cumtrapz'は、台形積分によって曲線下の面積を計算する関数です。これは「プラクマ」パッケージの一部です。私は '.'を使用しようとしましたが、' Chamber'因子の各レベルについて同じ値を与えました。私は機能を変えることに行きます。 –

答えて

0

私はその後、正しく理解していれば、次のいずれかの

library(pracma); library(dplyr) 


test_data <- test_data %>% group_by(Chamber) %>% 
      mutate(emission=max(cumtrapz(Time_cumulative, Flux_N2O))) %>% ungroup 

### or 

test_data <- test_data %>% group_by(Chamber) %>% 
      mutate(cumulative_emission=cumtrapz(Time_cumulative, Flux_N2O)) %>% ungroup 
関連する問題