R重塑数据
示例
数据通常在表中。通常,可以将此表格数据分为宽和长格式。在广泛的格式中,每个变量都有自己的列。
但是,有时使用长格式会更方便,因为所有变量都在一列中,而值在第二列中。
BaseR和第三方程序包可用于简化此过程。对于每个选项,mtcars将使用数据集。默认情况下,该数据集为长格式。为了使程序包正常工作,我们将把行名插入第一列。
mtcars # shows the dataset data <- data.frame(observation=row.names(mtcars),mtcars)
基数R
baseR中有两个函数可用于在宽格式和长格式之间进行转换:stack()和unstack()。
long <- stack(data) long # this shows the long format wide <- unstack(long) wide # this shows the wide format
但是,对于更高级的用例,这些功能可能会变得非常复杂。幸运的是,还有其他使用第三方软件包的选项。
提迪尔包
该软件包用于gather()从宽到长的spread()转换以及从长到宽的转换。
library(tidyr) long <- gather(data, variable, value, 2:12) # where variable is the name of the # variable column, value indicates the name of the value column and 2:12 refers to # the columns to be converted. long # shows the long result wide <- spread(long,variable,value) wide # shows the wide result (~data)
该data.table包
该data.table包扩展的reshape2功能和使用功能,melt()从广角到去长,dcast()从长期去宽。
library(data.table) long <- melt(data,'observation',2:12,'variable', 'value') long # shows the long result wide <- dcast(long, observation ~ variable) wide # shows the wide result (~data)