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)換的值的變量名。
這個是寬格式
