溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

r語言中如何使用reshape2包將寬型數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)型數(shù)據(jù)

發(fā)布時(shí)間:2022-03-19 14:25:11 來源:億速云 閱讀:508 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了r語言中如何使用reshape2包將寬型數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)型數(shù)據(jù)的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇r語言中如何使用reshape2包將寬型數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)型數(shù)據(jù)文章都會(huì)有所收獲,下面我們一起來看看吧。

長(zhǎng)數(shù)據(jù) vs 寬數(shù)據(jù)

對(duì)于寬型數(shù)據(jù),每列代表一個(gè)不同的變量。例如datasets包中的mtcars數(shù)據(jù)集就是寬型數(shù)據(jù):

# Wide format

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

對(duì)于長(zhǎng)型數(shù)據(jù),一列包含了所有可能的變量,另一列是對(duì)應(yīng)的取值。上面的數(shù)據(jù)可以用長(zhǎng)型數(shù)據(jù)來表示:

# Long format
  variable value
1      mpg  21.0
2      mpg  21.0
3      mpg  22.8
4      mpg  21.4
5      mpg  18.7
6      mpg  18.1
...
    variable value
347     carb     2
348     carb     2
349     carb     4
350     carb     6
351     carb     8
352     carb     2

長(zhǎng)型數(shù)據(jù)可以包含兩個(gè)以上的列,尤其是提供ID變量的時(shí)候。如下所述。

在實(shí)際應(yīng)用中,寬型數(shù)據(jù)更具可讀性,長(zhǎng)型數(shù)據(jù)則更適合做分析。因此,知道如何在它們之間進(jìn)行轉(zhuǎn)換非常有用。

reshape2包中兩個(gè)主要的函數(shù)是:

  1. melt——將寬型數(shù)據(jù)融合成長(zhǎng)型數(shù)據(jù)

  2. cast——將長(zhǎng)型數(shù)據(jù)轉(zhuǎn)成寬型數(shù)據(jù)

melt

接下來,我們?cè)赿atasets包中的mtcars數(shù)據(jù)集上進(jìn)行操作。它一開始是上面展示的寬型數(shù)據(jù)。我們要把它融合成下面的長(zhǎng)型數(shù)據(jù):

mtcars$car <- rownames(mtcars)
mtcarsMelt <- melt(mtcars)
head(mtcarsMelt)

                car variable value
1         Mazda RX4      mpg  21.0
2     Mazda RX4 Wag      mpg  21.0
3        Datsun 710      mpg  22.8
4    Hornet 4 Drive      mpg  21.4
5 Hornet Sportabout      mpg  18.7
6           Valiant      mpg  18.1

注:譯者在R里得到的是melt自動(dòng)選取car作為ID變量,原文是選取car和cyl作為ID變量。要得到相同結(jié)果只需在參數(shù)id.vars中指定相應(yīng)變量即可。

我們可以通過參數(shù)variable.name和value.name分別對(duì)variable和value列重命名。例如,我們想對(duì)所有的汽車根據(jù)它的汽缸數(shù)和齒輪數(shù)做分類??梢韵裣旅孢@樣:

mtcarsMelt <- melt(mtcars, id.vars = c('cyl', 'gear'), variable.name = 'carVariable', value.name = 'carValue')
head(mtcarsMelt)

  cyl gear carVariable carValue
1   6    4         mpg       21
2   6    4         mpg       21
3   4    4         mpg     22.8
4   6    3         mpg     21.4
5   8    3         mpg     18.7
6   6    3         mpg     18.1

tail(mtcarsMelt)

    cyl gear carVariable       carValue
315   4    5         car  Porsche 914-2
316   4    5         car   Lotus Europa
317   8    5         car Ford Pantera L
318   6    5         car   Ferrari Dino
319   8    5         car  Maserati Bora
320   4    4         car     Volvo 142E

通常,使用變量組合來唯一的識(shí)別每個(gè)數(shù)據(jù)點(diǎn)個(gè)好辦法,但是這里有多個(gè)點(diǎn)的cyl和gear組合值卻是相同的,這不是好的辦法。當(dāng)你需要把數(shù)據(jù)轉(zhuǎn)回寬型數(shù)據(jù)時(shí)會(huì)有點(diǎn)問題了(下面會(huì)看到)。

cast

cast函數(shù)的作用是將長(zhǎng)型數(shù)據(jù)轉(zhuǎn)成寬型數(shù)據(jù)。cast函數(shù)的兩種主要類型是:

  1. dcast——返回的結(jié)果是一個(gè)數(shù)據(jù)框

  2. acast——返回的結(jié)果可以是向量、矩陣或者數(shù)組

由于數(shù)據(jù)框?qū)ο笫亲畛R姷?,我將演示如何使用dcast。下面展示的是長(zhǎng)型數(shù)據(jù)轉(zhuǎn)回成寬型數(shù)據(jù):

mtcarsMelt <- melt(mtcars)
mtcarsCast <- dcast(mtcarsMelt, car ~ variable)
head(mtcarsCast)

                  car  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1        AMC Javelin 15.2   8  304 150 3.15 3.435 17.30  0  0    3    2
2 Cadillac Fleetwood 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
3         Camaro Z28 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
4  Chrysler Imperial 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
5         Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
6   Dodge Challenger 15.5   8  318 150 2.76 3.520 16.87  0  0    3    2

dcast函數(shù)通過一個(gè)式子來把數(shù)據(jù)轉(zhuǎn)成寬型數(shù)據(jù)。在本篇譯文中,由于我在R上自動(dòng)的到ID變量只有car,所以我給出的式子是car ~ variable。這里car是ID變量,variable變量列的名稱。要想跟原文一樣只需在melt時(shí)指定id.vars參數(shù)即可。

如果我們指定cyl和gear作為ID變量融合數(shù)據(jù)后,再轉(zhuǎn)回寬型變量時(shí),會(huì)得到如下所示的結(jié)果:

mtcarsCast <- dcast(mtcarsMelt, cyl + gear ~ variable)
head(mtcarsCast)

  cyl gear mpg disp hp drat wt qsec vs am carb car
1   4    3   1    1  1    1  1    1  1  1    1   1
2   4    4   8    8  8    8  8    8  8  8    8   8
3   4    5   2    2  2    2  2    2  2  2    2   2
4   6    3   2    2  2    2  2    2  2  2    2   2
5   6    4   4    4  4    4  4    4  4  4    4   4
6   6    5   1    1  1    1  1    1  1  1    1   1

會(huì)得到警告信息:Aggregation function missing: defaulting to length。數(shù)據(jù)集顯示的是每個(gè)cyl和gear組合的總的觀測(cè)數(shù)。這是因?yàn)閐cast函數(shù)不能唯一標(biāo)識(shí)每個(gè)數(shù)據(jù)點(diǎn)。然而,它還有其他用處。例如,我們通過如下所示的fun.aggregate參數(shù)可以得到每個(gè)cyl和gear組合值所對(duì)應(yīng)的所有變量的平均值。

mtcars$car <- NULL
mtcarsMelt <- melt(mtcars, id.vars = c('cyl', 'gear'))
mtcarsCast <- dcast(mtcarsMelt, cyl + gear ~ variable, fun.aggregate = mean)
head(mtcarsCast)

  cyl gear    mpg    disp    hp drat       wt    qsec  vs   am carb
1   4    3 21.500 120.100  97.0 3.70 2.465000 20.0100 1.0 0.00  1.0
2   4    4 26.925 102.625  76.0 4.11 2.378125 19.6125 1.0 0.75  1.5
3   4    5 28.200 107.700 102.0 4.10 1.826500 16.8000 0.5 1.00  2.0
4   6    3 19.750 241.500 107.5 2.92 3.337500 19.8300 1.0 0.00  1.0
5   6    4 19.750 163.800 116.5 3.91 3.093750 17.6700 0.5 0.50  4.0
6   6    5 19.700 145.000 175.0 3.62 2.770000 15.5000 0.0 1.00  6.0

這里,我們刪除了car列。這是因?yàn)槲覀儾幌M趍tcarsMelt的value列里存在非數(shù)值型數(shù)據(jù),否則會(huì)得到錯(cuò)誤。

關(guān)于“r語言中如何使用reshape2包將寬型數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)型數(shù)據(jù)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“r語言中如何使用reshape2包將寬型數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)型數(shù)據(jù)”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI