2017-10-04 11 views
-1

だから私持って次のデータセット(これは小さなサンプル/それが元であること7K行で、どのように見えるかの例と30列7十年以上である):summaryとgroup byを使用してrでサマリーテーブルを作成する方法は?

Year,Location,Population Total, Median Age, Household Total 
2000, Adak, 220, 45, 67 
2000, Akiachak, 567, NA, 98 
2000, Rainfall, 2, NA, 11 
1990, Adak, NA, 33, 56 
1990, Akiachak, 456, NA, 446 
1990, Tioga, 446, NA, NA 

私は概要を作成したいです各変数の場所によって何年のデータが利用可能であるかを示す表。したがって、このような何か(前から小規模例えば)働くだろう:

Location,Population Total, Median Age, Household Total 
Adak,1,2,2 
Akiachak,2,0,2 
Rainfall,1,0,1 
Tioga,1,0,0 

私はRに新たなんだと私は構文がわからないんですので、一緒にこれらの2つのコマンドを使用していません。どんな助けが素晴らしいか選択肢になるでしょう。

x %>% 
    group_by(Location) %>% 
    summarise(count_years = n(), 
      count_pop_total = sum(!is.na(Population_Total)), 
      count_median_age = sum(!is.na(Median_Age)), 
      count_house_total = sum(!is.na(Household_Total))) 

あなたが実行したいものは何でも操作して平均値を置き換えることができます。

+0

あなたは 'dplyr'パッケージを使いたいと思うでしょう。 'group_by(Location)'で始め、 'summarise'や' count'文を書いてください。私は 'dplyr'の使い方のチュートリアルを調べることをお勧めします。 –

+0

また、あなたが試したアプローチの例を提供している場合は、ここでの質問に対するフィードバックが非常に高くなります。つまり、これは宿題の質問として解釈されるかもしれません... –

+0

ありがとう! NAを1に、Naを0に、そして年を取っている間に行を集計することを考えています。しかし、私の上司は、私はこれらの2つの機能を一緒に使ってみるべきだと言います。 – jules

答えて

1

dplyrからsummarize_allと解決策:

library(dplyr) 
df %>% 
    group_by(Location) %>% 
    summarize_all(funs(sum(!is.na(.)))) %>% 
    select(-Year) 

それともsummarize_atを使用することができます。

df %>% 
    group_by(Location) %>% 
    summarize_at(vars(-Year), funs(sum(!is.na(.)))) 

結果:

# A tibble: 4 x 4 
    Location PopulationTotal MedianAge HouseholdTotal 
     <chr>   <int>  <int>   <int> 
1  Adak    1   2    2 
2 Akiachak    2   0    2 
3 Rainfall    1   0    1 
4  Tioga    1   0    0 

データ:

df = read.table(text = "Year,Location,PopulationTotal, MedianAge, HouseholdTotal 
       2000, Adak, 220, 45, 67 
       2000, Akiachak, 567, NA, 98 
       2000, Rainfall, 2, NA, 11 
       1990, Adak, NA, 33, 56 
       1990, Akiachak, 456, NA, 446 
       1990, Tioga, 446, NA, NA", header = TRUE, sep = ",", stringsAsFactors = FALSE) 

library(dplyr)  
df = df %>% 
    mutate_at(vars(PopulationTotal:HouseholdTotal), as.numeric) 
1

あなたはこのような何かを行うことができます。より一般的な解決法についてはdplyr vignetteをご覧ください。

+0

として 'dplyr'を追加したいかもしれません。私は質問を間違って読む – tbradley

+0

OPが明示的に 'group_by'と' summarize'を使って欲しいものを与えるために私の答えを変更しましたが、 'summarize_all'や' summarize_at'で@useRによって与えられた答えは、 – tbradley

関連する問題