2

次のようなデータフレームがあります。

mydf <- data.frame(Term = c('dog','cat','lion','tiger','pigeon','vulture'), Category = c('pet','pet','wild','wild','pet','wild'),
    Count = c(12,14,19,7,11,10), Rate = c(0.4,0.7,0.3,0.6,0.1,0.8), Brand = c('GS','GS','MN','MN','PG','MN')    ) 

データフレームの結果:

     Term Category Count Rate Brand
1     dog      pet    12  0.4    GS
2     cat      pet    14  0.7    GS
3    lion     wild    19  0.3    MN
4   tiger     wild     7  0.6    MN
5  pigeon      pet    11  0.1    PG
6 vulture     wild    10  0.8    MN

このデータフレームを次のように変換したいresultDF

Category         pet              wild              
Term             dog,cat,pigeon   lion,tiger,vulture
Countlessthan13  dog,pigeon       tiger,vulture     
Ratemorethan0.5  cat              tiger,vulture     
Brand            GS,PG            MN                

行見出しは、Countlessthan13 のような操作を示します。これは、Count < 13 が用語に適用されてからグループ化されることを意味します。また、ブランド名は一意であり、繰り返されないことに注意してください。

dcast と Melt を試しましたが、望ましい結果が得られませんでした。

4

1 に答える 1

3

を使用してこれを行うことができますdata.table。'data.frame' を 'data.table' ( ) に変換し、 'Category' でグループ化し、'Count' が 13 未満または 'Rate' が 0.5 より大きい 'Term' の値をing してsetDT(mydf)いくつかの集計列を作成します。 「ブランド」の要素を取り入れています。pasteuniquepasteunique

library(data.table)
dt <- setDT(mydf)[, .(Term = paste(unique(Term), collapse=","),
                      Countlesstthan13 =  paste(unique(Term[Count < 13]), collapse=","),

                      Ratemorethan0.5 = paste(unique(Term[Rate > 0.5]), collapse=","), 
                      Brand = paste(unique(Brand), collapse=",")), by = Category]

要約されたデータセット ('dt') からmelt、'id.var' を 'Category' として指定して 'long' 形式にし、dcast'wide' 形式に戻します。

dcast(melt(dt, id.var = "Category", variable.name = "category"),
                            category ~Category, value.var = "value")
#           category            pet               wild
#1:             Term dog,cat,pigeon lion,tiger,vulture
#2: Countlesstthan13     dog,pigeon      tiger,vulture
#3:  Ratemorethan0.5            cat      tiger,vulture
#4:            Brand          GS,PG                 MN
于 2016-08-19T06:35:09.490 に答える