2016-04-22 8 views
1

私は長さ関数からいくつかの回答を除外する方法を探しています。 この構文は、どのように私は0を除外して4の答えを得るためにRデータフレームからいくつかの回答を除外する

length(S.freq$freq[S.freq$freq!=0]) 

を変更します

Id <- c(1,2,3,4,5) 
ClassA <- c(1,NA,3,1,1) 
ClassB <- c(2,1,1,3,3) 
R <- c(5,5,7,NA,9) 
S <- c(3,7,NA,9,5) 
df <- data.frame(Id,ClassA,ClassB,R,S) 

ZeroTenNAScale <- c(0:10,NA); 

R.freq = setNames(nm=c('R','freq'),data.frame(table(factor(df$R,levels=ZeroTenNAScale,exclude=NULL)))); 
S.freq = setNames(nm=c('S','freq'),data.frame(table(factor(df$S,levels=ZeroTenNAScale,exclude=NULL)))); 

length(S.freq$freq[S.freq$freq!=0]) 

# 5 

考える

select * from someTable 
    where variableName not in (0, null) 

可能性があり、SQLでGetting R Frequency counts for all possible answersからの質問にフォローされとNA?

+1

'length(S.freq $ freq [S.freq $ freq!= 0&!is.na(S.freq $ S)])'? – Jaap

+0

答えを@ procrastinatus-maximusとして追加できたら、それを選択した回答としてマークします。それは他の答えよりも柔軟性があり、さらに簡単に基準を追加することができます。 –

答えて

1

を使用することができます:

idx <- S.freq$freq!=0 & !is.na(S.freq$S) 
length(S.freq$freq[idx]) 
2

sumを使用して整数の合計を計算できます。列にNAが見つかった場合はna.rm()を使用できますが、NAは異なる列にあるため、最初にNAを含む行を削除する必要があります。

当社のソリューションは、以下のように、我々はS.freq[!is.na(S.freq$S),]をサブセット化により、NAを含む行を削除するが、我々はまた、第二のカラムfreq必要です:

sum(S.freq[!is.na(S.freq$S), "freq"]) 
# 4 
2

あなたが試すことができますがna.omitに(とsubsetNA Sを除去するために) )0に等しいfreq内のすべての行をオフに取り除く:

subset(na.omit(S.freq), freq != 0) 

    S freq 
4 3 1 
6 5 1 
8 7 1 
10 9 1 

ここから、それは簡単です:

length(subset(na.omit(S.freq), freq != 0)$freq) 
[1] 4 

問題を解決しますか?あなたは他の条件でそれを拡張したい場合は、読みやすくするために最初のインデックスベクトルを作ることができ

length(S.freq$freq[S.freq$freq!=0 & !is.na(S.freq$S)]) 

3

私たちは第二のフィルタとして!is.na(S.freq$S)を追加colSums

colSums(!is.na(S.freq)[S.freq$freq!=0,])[[1]] 
#[1] 4 
0

あなたはfrequencで値を探していますy> 0の場合、ユニークな値を探していることを意味します。

length(unique(df$S)) 

、あなたがして、回答4を得る脇NAを残す:その値に基づいて、アイテムの数を除外する方法についてのご質問については

length(unique(df$S[!is.na(df$S)])) 

: この情報は、ベクトルSから直接取得しますRでは、これはすでにあなたがコードで使っていたように、論理ベクトルで簡単に行えます。

1つの論理ベクトルに異なる条件を組み合わせて例えばサブセット化する。

length(S.freq$freq[S.freq$freq!=0 & !is.na(S.freq$freq)]) 
+0

2つの回答の頻度カウントが重複していると、一意ではありません。例長さ(一意(df $ R [!is.na(df $ R)])) [1] 3 > df $ R [1] 5 5 7 NA 9 –

+0

ベクトルdfの期待される答えは$ R?あなたは5:2、7:1、NA:1、9:1の周波数を持っています.Onmmiting NAには、周波数を持つ3つの値!= 0 – MarkusN

+0

長さは4 –

関連する問題