2016-05-04 12 views
-1

R内のテーブルの各列の要素をカウントする方法次のようになり、私は、データセットを持って

data <- read.csv("sample.csv")

subject gender age type satisfation  agree 
1 f 22 a yes yes 
2 f 23 b no yes 
3 f 21 b  no 
4 m 24 c yes yes 
5 f 22 b no yes 
6 m  a yes yes 
7  25 c yes no 
8 m 21 b no yes 
9 f 23 c yes yes 

私はカウントしたいと思います(実際には> 50個の列があります)各列の要素(NAを数えない)とカウントするように

subject gender age type satisfation  agree 
9 8 8 9 8 9 
私は、スクリプトを書いた

以下のレイアウトとして結果をエクスポート

それはすべて0

dput(head(data, 9))

structure(list(subject = 1:9, gender = structure(c(2L, 2L, 2L, 
3L, 2L, 3L, 1L, 3L, 2L), .Label = c("", "f", "m"), class = "factor"), 
    age = c(22L, 23L, 21L, 24L, 22L, NA, 25L, 21L, 23L), type = structure(c(1L, 
    2L, 2L, 3L, 2L, 1L, 3L, 2L, 3L), .Label = c("a", "b", "c" 
    ), class = "factor"), satisfation = structure(c(3L, 2L, 1L, 
    3L, 2L, 3L, 3L, 2L, 3L), .Label = c("", "no", "yes"), class = "factor"), 
    agree = structure(c(2L, 3L, 1L, 3L, 2L, 3L, 1L, 3L, 2L), .Label = c("no", 
    "yes", "yes "), class = "factor"), time = c(23L, 54L, 67L, 
    324L, 87L, 12L, 756L, 34L, 98L), day = c(1L, 3L, 2L, 5L, 
    7L, 4L, 3L, 1L, 4L)), .Names = c("subject", "gender", "age", 
"type", "satisfation", "agree", "time", "day"), row.names = c(NA, 
9L), class = "data.frame") 

を出したので、私はうまくいかなかった

counting <- function(x) { 
    for(i in 1:length(data)) { 
    data <- length(which(!is.na(x$i))) 
     print(data) 
    } 
    return(data) 
} 
counting(data) 

は、スクリプトの任意の勧告はplzは、ありますか?

ありがとうございました!

+0

'x $ i'と入力して結果を調べる...' sapply'や何かをここで使うか、単に 'summary'(NAカウントを報告する)を使うといいでしょう。 – Frank

+0

@Frankあなたが意味するものを得る。要約はカウントしたくないNAを数える:( – PNY

+0

私はあなたが正しい構文を使用していないことを確認するために 'x $ i'と打ち込んだのですか?そして第二に、' summary'はあなたが望む情報を表示します(あなたが 'sapply'から得ることができる)あなたの好みのフォーマットではありません。まだCSVからデータを読み込んでいない場合は、この問題を試みる準備ができていないかもしれませんが、 Dput(DF) 'を呼び出して、ここに結果をコピーしてください。 – Frank

答えて

5

テーブルにRをロードすると、NAの代わりに空白があります。したがって、.csvファイルを読むときに、どのようにNAsがコード化されるかを指定します。 ""または多分 ""としてコードされているようです。

NAsを取得したら、このコードを実行できます。テーブルがdfとなっているとします。 @JasonAizkalnsとして

counts <- apply(df, 2, function(x) length(na.omit(x))) 

かは、示唆:

data <- read.csv("sample.csv", na.strings = "") 
sapply(data, function(x) sum(!is.na(x)) 
+1

ありがとう私が望むものを正確に得ました。ほんとうにありがとう!!!! – PNY

+0

もしあなたが心配していないなら、どうすればこれらのカウントを一緒に追加するコードを書くことができますか?テーブル全体の要素数をカウントする(NAを省略) – PNY

+0

テーブル全体の要素の総数を求めたい場合は、sum(counts)を呼び出してみてください。 :) –

7

は、任意のNAトラブルを克服するように

colSums(!is.na(df)) 
# subject gender  age  type satisfation agree  time  day 
#   9  9   8   9   9  9   9   9 

が@DavidArenburg提案を追加、あなたは、単にcolSums使うNAを扱っていると仮定すると、

colSums(!is.na(df) | df != "", na.rm = TRUE) 
+1

これは、データにコード化されていないNAsがあるようです。だから、これを単独で使うだけでは正確ではないでしょう。 –

+0

はい、あなたがあなたの答えで言ったように "あなたがNAsを取得した後、あなたはこのコードを実行することができます。あなたのテーブルが' df'と呼ばれているとします。 – Sotos

+1

右私はちょうどあなたの答えが不完全であると思った。文脈ではそれは意味をなさない。たぶん自分自身や他の人が言及している注意書きでそれを更新しますか? –

関連する問題