2016-05-20 1 views
1

のは、私はそうのような行列があるとしましょう:行はに許可されていないとき特定の条件で行算出手段

df <- matrix(data = c(1,2,9,3,7,NA,4,NA,NA,NA,NA,NA), nrow=4, ncol=3, byrow=T) 

は私が計算したいどのような、行列の行手段です複数のNAを持つ。この場合、最終結果は4つの成分、より具体的にはc(4,5,NA,NA)のベクトルとなる。

私はそうのような要件を満たして別々のベクター作ることができます。

df1 <- df[c(which(rowSums(is.na(df))<=1)),] 

df2 <- df[c(which(rowSums(is.na(df))>1)),] 

rowMeans(df1, na.rm=T) 

rowMeans(df2, na.rm=F) 

をしかし、私はちょうど1のベクトルを持っているための良い方法を見つけ出すように見えることはできません。

+0

出力の最初の要素は '4'でなければなりません – akrun

+0

@Frankあなたは正しいです、それをもう一度やりません。 –

答えて

2

我々はNAに1つの以上のNAを持つ行を割り当て、次に行うことができますrowMeansna.rm=TRUE

df[rowSums(is.na(df))>1,] <- NA 
rowMeans(df, na.rm=TRUE) 

または私たちは一歩

rowMeans(df, na.rm=TRUE)*NA^(rowSums(is.na(df))>1) 

それとも別のオプションでこれを行うことができます取得するためのインデックスを作成することですrowMeans

i1 <- !rowSums(is.na(df))>1 
ifelse(i1, rowMeans(df, na.rm=TRUE), NA_real_)