1.前言
melt()
是reshape2
包中的一个函数,它用于将数据框从“宽格式(wide format)”转换为“长格式(long format)”。
宽格式指的是一列代表一组,多列数据用于表示一组内的多个变量;
而长格式指的是一列代表一个变量,多列数据用于表示不同组之间的差异。
2.melt()
melt()
函数可以帮助我们将数据从宽格式转换为长格式,其基本用法如下:
melt(data, id.vars, measure.vars, variable.name, value.name)
data:要转换的数据框;
id.vars:指定哪些列是标识符,不需要被转换;
measure.vars:指定哪些列需要被转换;
variable.name:新列的列名,默认为“variable”;
value.name:新列中数值的列名,默认为“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
宽格式
现在我们想将这个数据框从宽格式转换为长格式,可以使用 melt() 函数:
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() 函数是 reshape2 包中的一个函数,用于将数据从长格式(long format)转换为宽格式(wide format)
library(reshape2)
# 创建数据框
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)
)
这个是长格式
这个数据框有三列,分别是性别(gender)、年份(year)和值(value),现在我们希望将其转换为以年份为行、性别为列、值为值的宽格式数据框。可以使用 dcast() 函数来实现:
# 使用dcast函数进行转换
df_wide <- dcast(df, year ~ gender, value.var = "value")
这里,year ~ gender 表示将年份作为行,性别作为列,
value.var
参数表示需要转换的值的变量名。
这个是宽格式