簡體   English   中英

將匯總行重塑為新列,分類數據

[英]Reshape aggregated rows to new columns, categorical data

我正在嘗試使用R將行聚合到列。 這是我的數據集的樣本。

age sex hash                                emotion     color
22  1   b17f9762462b37e7510f0e6d2534530d    Lonely      #006666
22  1   b17f9762462b37e7510f0e6d2534530d    Energetic   #66CC00
22  1   b17f9762462b37e7510f0e6d2534530d    Calm        #FFFFFF
22  1   b17f9762462b37e7510f0e6d2534530d    Angry       #FF0000
24  1   7bb50ca97a9b517239b39440a966d2f6    Calm        #006666
24  1   7bb50ca97a9b517239b39440a966d2f6    Excited     #0033cc
24  1   7bb50ca97a9b517239b39440a966d2f6    Empty/void  #999999
24  1   7bb50ca97a9b517239b39440a966d2f6    No emotion  #FF6600
26  1   209f1ba8ef86e855deccc0aae120825c    Comfortable #330066
21  1   b9e9309c0b1255a7efb2edf9ba66ae46    Energetic   #330099
21  1   b9e9309c0b1255a7efb2edf9ba66ae46    Happy       #330066
26  1   209f1ba8ef86e855deccc0aae120825c    No emotion  #FFCC00
26  1   209f1ba8ef86e855deccc0aae120825c    Calm        #006666
21  1   61debd3dea6d1aacce5c9fc7daec4fe5    Empty/void  #FFFFFF
21  1   b9e9309c0b1255a7efb2edf9ba66ae46    Calm        #006666
26  1   209f1ba8ef86e855deccc0aae120825c    No emotion  #339900
21  1   61debd3dea6d1aacce5c9fc7daec4fe5    Loved       #FF6600
26  1   209f1ba8ef86e855deccc0aae120825c    No emotion  #66CC00

我想做的就是得到這個:

age sex hash            #000000 #FF0000 ... #FFFFFF
22  1   8798tkojstwz9ei sad     happy   ... loved
...

哈希定義了一個響應,相關的數據是年齡和性別。

我希望每個響應都為1,而不是幾列。 每種顏色都應具有自己的列,並將相關的情感作為該列的值。

整個數據集有13種顏色,20多種情感和1000多種響應。 數據集與樣本完全一樣,並存儲在mySQL數據庫中。

我嘗試過重塑,但是它不能很好地用於分類數據,或者我沒有使用適當的功能。 有任何想法嗎? 如果需要,它可以包括一些mySQL准備。 Java在這里非常慢,並且由於我有12k +行,R聽起來很適合這樣做。

謝謝。

使用reshape2

dcast(dat,...~color,value.var='emotion')
  age sex                             hash #0033cc #006666     #330066   #330099   #339900   #66CC00 #999999 #FF0000   #FF6600
1  21   1 61debd3dea6d1aacce5c9fc7daec4fe5    <NA>    <NA>        <NA>      <NA>      <NA>      <NA>    <NA>    <NA>     Loved
2  21   1 b9e9309c0b1255a7efb2edf9ba66ae46    <NA>    Calm       Happy Energetic      <NA>      <NA>    <NA>    <NA>      <NA>
3  22   1 b17f9762462b37e7510f0e6d2534530d    <NA>  Lonely        <NA>      <NA>      <NA> Energetic    <NA>   Angry      <NA>
4  24   1 7bb50ca97a9b517239b39440a966d2f6 Excited    Calm        <NA>      <NA>      <NA>      <NA>   Empty    <NA> Noemotion
5  26   1 209f1ba8ef86e855deccc0aae120825c    <NA>    Calm Comfortable      <NA> Noemotion Noemotion    <NA>    <NA>      <NA>
    #FFCC00 #FFFFFF
1      <NA>   Empty
2      <NA>    <NA>
3      <NA>    Calm
4      <NA>    <NA>
5 Noemotion    <NA>

如果我正確地理解了您的目標,那么reshape()確實是您想要的功能。 假設您的數據集名為mydf ,請嘗試以下操作:

reshape(mydf, direction = "wide", 
        idvar = c("hash", "age", "sex"), 
        timevar = "color")
#    age sex                             hash emotion.#006666 emotion.#66CC00
# 1   22   1 b17f9762462b37e7510f0e6d2534530d          Lonely       Energetic
# 5   24   1 7bb50ca97a9b517239b39440a966d2f6            Calm            <NA>
# 9   26   1 209f1ba8ef86e855deccc0aae120825c            Calm      No emotion
# 10  21   1 b9e9309c0b1255a7efb2edf9ba66ae46            Calm            <NA>
# 14  21   1 61debd3dea6d1aacce5c9fc7daec4fe5            <NA>            <NA>
# emotion.#FFFFFF emotion.#FF0000 emotion.#0033cc emotion.#999999 emotion.#FF6600
# 1             Calm           Angry            <NA>            <NA>            <NA>
# 5             <NA>            <NA>         Excited      Empty/void      No emotion
# 9             <NA>            <NA>            <NA>            <NA>            <NA>
# 10            <NA>            <NA>            <NA>            <NA>            <NA>
# 14      Empty/void            <NA>            <NA>            <NA>           Loved
# emotion.#330066 emotion.#330099 emotion.#FFCC00 emotion.#339900
# 1             <NA>            <NA>            <NA>            <NA>
# 5             <NA>            <NA>            <NA>            <NA>
# 9      Comfortable            <NA>      No emotion      No emotion
# 10           Happy       Energetic            <NA>            <NA>
# 14            <NA>            <NA>            <NA>            <NA>

以后可以根據需要重命名列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM