2017-09-28 2 views
1

名前の変更:基本的にR - 行を組み合わせると、次のデータフレーム内の値再符号化しながら、私は、行をマージしようとしている値

 Days Object Frequency 
1 1  Fruit 20 
2 2  Fruit 21 
3 3  Fruit 41 
4 4  Fruit 12 
5 5  Fruit 1 
6 6  Fruit 9 
8 8  Fruit 1 
9 9  Fruit 14 

を、私はこのような分類変数に日グループしたいと思います:

Days Object Frequency 
1 1-2  Fruit  41 
2 3-4  Fruit  43 
3 5+  Fruit  25 

[期間]列に新しい値を作成する際にマージする方法はありますか?

謝罪これはばかげた質問

答えて

3

ベースRでは、cutaggregateを組み合わせることができます。ここでは、cutが曜日グループを生成し、それらのグループにラベルを提供します。これは、オブジェクトのリストにaggregateに入力され、完全なグループ化が実行されます。 aggregateは、最初の引数としてFrequencyをとり、sumを適用します。

aggregate(dat$Frequency, list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf), 
             labels=c("1-2", "2-4", "5+")), 
           object=dat$Object), 
      sum) 

これは、x変数の名前を変更する

Days object x 
1 1-2 Fruit 41 
2 2-4 Fruit 53 
3 5+ Fruit 25 

を返し、あなたはsetNamesでこれをラップする、またはちょうど2行目にnames<-を使用することができます。これに相当

data.table

library(data.table) 
setDT(dat)[, sum(Frequency), 
      by=list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf), labels=c("1-2", "2-4", "5+")), 
        object=dat$Object)] 
    Days object V1 
1: 1-2 Fruit 41 
2: 2-4 Fruit 53 
3: 5+ Fruit 25 
です
3

ある場合は、動的にgroup_byでグループ変数を作成することができ、その後、(あなたにもObjectによってグループしたいと仮定)を要約します:

df %>% 
    group_by(Days = if_else(Days %in% c(1,2), "1-2", if_else(Days %in% c(3,4), "3-4", "5+")), 
      Object) %>% 
    summarise(Frequency = sum(Frequency)) 

# A tibble: 3 x 3 
# Groups: Days [?] 
# Days Object Frequency 
# <chr> <fctr>  <int> 
#1 1-2 Fruit  41 
#2 3-4 Fruit  53 
#3 5+ Fruit  25 
関連する問題