2016-09-08 8 views
0

私は1つの配列から最大値をとり、同じ製品の歩留まりyearで除算新しい変数を作成しようとしていますを割ます。例えば、値のグループから最大値を取得し、年間利回り

orangesum<- c(12,20,NA,60) 
applesum<- c(4,NA,222,34) 
grapesum<- c(4,33,NA,223) 
orangeysum<- c(400,220,330,456) 
appleysum <- c(220,340,394,349) 
grapeysum<- c(33,344,33,2345) 
year<- c(2008,2009,2010,2011) 

df<- data.frame(orangesum,applesum, grapesum, orangeysum, appleysum,grapeysum, year) 

は、私は、製品のそのタイプの年間収量の記録/最大値の最大値であるmaxyieldという変数を作成します。第1行目には400分の12、344分の33、222/394223/2345であろう。助言がありますか?

+0

私はそれを更新しました!あなたは素晴らしいソリューションを手に入れました!私はいくつかのレコードでNaNを取得しています。どうすればそれらに対処する必要がありますか?元のデータセット内 – user3570187

+0

、サブセットのデータセットの特定の行のすべてのNA要素が存在し得ます。そのような場合はNaNとしておく方が良いです。 – akrun

+0

@akrun 'PMAX(NA)' 'NA'を与えます。 「x/NA」または「NA/x」は「NA」を与える。たぶんNaNはゼロで割ることになります(これは最大の* ysumです)?とにかく、ええ、それがゼロ除算であれば、NaNとして残すのが最善です。 – Frank

答えて

2

我々は(*sum*ysumような名前の列に相当)df[1:3]df[4:6]すなわちデータセットのサブセットの行のmax値を取得するためにpmaxを使うと「maxyield」を作成するものと分けることができます。

df$maxyield <- do.call(pmax, c(df[1:3], na.rm=TRUE))/do.call(pmax, c(df[4:6], na.rm = TRUE)) 
df$maxyield 
#[1] 0.03000000 0.09593023 0.56345178 0.09509595 
関連する問題