R語言:reshape2-長寬格式轉(zhuǎn)換之melt()和dcast()函數(shù)

1.前言

melt()reshape2包中的一個函數(shù),它用于將數(shù)據(jù)框從“寬格式(wide format)”轉(zhuǎn)換為“長格式(long format)”。

寬格式指的是一列代表一組,多列數(shù)據(jù)用于表示一組內(nèi)的多個變量;

而長格式指的是一列代表一個變量,多列數(shù)據(jù)用于表示不同組之間的差異。

2.melt()

melt() 函數(shù)可以幫助我們將數(shù)據(jù)從寬格式轉(zhuǎn)換為長格式,其基本用法如下:

melt(data, id.vars, measure.vars, variable.name, value.name)

data:要轉(zhuǎn)換的數(shù)據(jù)框;
id.vars:指定哪些列是標識符,不需要被轉(zhuǎn)換;
measure.vars:指定哪些列需要被轉(zhuǎn)換;
variable.name:新列的列名,默認為“variable”;
value.name:新列中數(shù)值的列名,默認為“value”。

舉例

df <- data.frame(group = c("A", "B"), var1 = c(1, 2), var2 = c(3, 4), var3 = c(5, 6))
df
#>   group var1 var2 var3
#> 1     A    1    3    5
#> 2     B    2    4    6
寬格式

現(xiàn)在我們想將這個數(shù)據(jù)框從寬格式轉(zhuǎn)換為長格式,可以使用 melt() 函數(shù):

library(reshape2)

df_long <- melt(df, id.vars = "group", measure.vars = c("var1", "var2", "var3"))
df_long
#>   group variable value
#> 1     A     var1     1
#> 2     B     var1     2
#> 3     A     var2     3
#> 4     B     var2     4
#> 5     A     var3     5
#> 6     B     var3     6
這個是長格式

3.dcast()

dcast() 函數(shù)是 reshape2 包中的一個函數(shù),用于將數(shù)據(jù)從長格式(long format)轉(zhuǎn)換為寬格式(wide format)

library(reshape2)

# 創(chuàng)建數(shù)據(jù)框
df <- data.frame(
  gender = c("M", "F", "M", "F", "M", "F"),
  year = c(2010, 2010, 2011, 2011, 2012, 2012),
  value = c(100, 200, 300, 400, 500, 600)
)
這個是長格式

這個數(shù)據(jù)框有三列,分別是性別(gender)、年份(year)和值(value),現(xiàn)在我們希望將其轉(zhuǎn)換為以年份為行、性別為列、值為值的寬格式數(shù)據(jù)框??梢允褂?dcast() 函數(shù)來實現(xiàn):

# 使用dcast函數(shù)進行轉(zhuǎn)換
df_wide <- dcast(df, year ~ gender, value.var = "value")

這里,year ~ gender 表示將年份作為行,性別作為列,value.var 參數(shù)表示需要轉(zhuǎn)換的值的變量名。

這個是寬格式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容