2016-12-19 15 views
-3

私はデータフレームをグループ化し、要約するための助けが必要です。私は可能な答えのいくつかを見てきましたが、私はそこにかなり得られるものは見つけられませんでした。rでデータフレームを要約

私は、次のようなデータフレームを持っている:

structure(list(Country = structure(c(3L, 2L, 1L, 3L, 3L, 2L), 
            .Label = c("CA", "MX", "US"), class = "factor"), 
       var1 = c(1L, 1L, 0L, 1L, 0L, 1L), 
       var2 = c(1L, 1L, 1L, 1L, 1L, 0L)), 
      .Names = c("Country", "var1", "var2"), class = "data.frame", 
      row.names = c(NA, -6L)) 

Country var1 var2 
    US    1    1 
    MX    1    1 
    CA    0    1 
    US    1    1 
    US    0    1 
    MX    1    0 

私は統計のカップルと国によってデータを要約する必要があります。私は国の行の総数と各varの合計が必要です。たとえば:

Country Frequency Sum.var1 Sum.var2 
    US     3       2      3 
    MX     2       2      1 
    CA     1       0      1 
+3

あなたは正確に何を試してみましたか?それは "あなたには届かない"ということでしたか?どこに問題があるのか​​を明確にしてください。この音は、あなたのために誰かのために要求するのではなく、質問のようにしてください。 – MrFlick

+2

reshape2、より具体的には「キャスト」機能のファミリをご覧ください。https://cran.r-project.org/web/packages/reshape2/reshape2.pdf – user443854

+1

コピー可能な形式でデータを投稿する必要がありますコンソールセッションに追加します。 –

答えて

1

はあなたが捜している結果を与えることができdplyrパッケージ

df <- df %>% group_by(Country) %>% 
    summarise(Frequency=n(), Sum_var1=sum(var1), Sum_var2=sum(var2)) 
+1

ありがとう!これは完全に機能し、私が探していたものとまったく同じでした。 – BStepp

1

集約関数を使用して。それが何をしているか

aggregate(df, df["Country"], 
      function(x) ifelse(is.numeric(x), sum(x), length(x))) 

:私は、次の呼び出しを使用することになり

  1. df最初の引数はあなたが、そうちょうどあなたの最初のデータフレームを要約しようとしているデータです。
  2. df["Country"]は、データフレームを集計するために使用するグループ(この場合は国ID)を指定しています。
  3. function(x) ...これはdf["Country"]で定義されたグループを使用してdfの各列に適用されるカスタム関数を定義しています。ここではifelse()コールを使用して、数字のvarフィールドの場合は、Countryフィールドとは異なる機能を使用します。 varフィールドに適用されるsum()は、国によって合計され、length()として各国の出現回数が得られます。