R语言 数据处理–数据转换
一个数据集可以以许多不同的方式呈现给世界。让我们来看看其中一个最基本的区别,即一个数据集是宽还是长。
宽数据集和长数据集的区别集中在我们是喜欢在数据集中有更多的行还是更多的列。一个专注于投放关于单列的额外数据的数据集被称为宽数据集,因为随着我们添加越来越多的列,数据集变得更宽。同样地,一个专注于将某一主题的数据列入行的数据集被称为长数据集。
在R语言的数据处理中,有时候,我们需要让长数据集变得更宽,反之亦然。一般来说,接受整洁数据概念的数据科学家通常喜欢长数据集而不是宽数据集,因为长数据集在R中操作起来更舒服。
在上图中,同一个数据集被表示为一个宽数据集和一个长数据集。它是一个带有收入分类的宗教数据集。当你知道了什么是长数据集和宽数据集后,让我们尝试使用R语言中的工具将宽数据集转换为长数据集,将长数据集转换为宽数据集。
将宽数据集转换为长数据集
tidyr “包中的 gather() 函数可以将宽数据集变成长数据集。gather函数的工作原理是键和值的概念。数据值代表了对单个变量的观察,而键是用来识别值所描述的变量的名称。
在上面的数据集中,收入作为键,对不同宗教的收入进行分类,而频率则为收入键提供数值。
语法:
gather(data, key, value, columns)
参数:
data: Tibble名称
key: 我们希望用于长数据集中的键列的名称。
value: 我们希望用于长数据集中的值列的名称。
columns: 我们希望从收集中包括或排除的宽数据集中的列列表。
或者,如果你想收集大部分的列,你可以指定你不想收集的列,在它们前面加上减号(-)。
# Making Wide Datasets Long with gather()
# Load the tidyverse
library(tidyverse)
# Read in the dataset
sample_data <- read.csv("C:/Users/Admin/Desktop/pew.csv")
sample_data
sample_data_long <- gather(sample_data, income, freq, -religion)
sample_data_long
输出
将长数据集转换为宽数据集
有时需要对gather()函数进行反向操作。因此, spread() 函数被用来将长数据集转换为宽数据集。
语法:
spread(data, key, value)
参数:
data: Tibble名称
key: 我们希望用于长数据集的key列的名称。
value: 我们希望用于长数据集的value列的名称。
library(tidyverse)
sample_data <- read.csv("C:/Users/Admin/Desktop/mexicanweather.csv")
sample_data
sample_data_wide <- spread(sample_data, element, value)
sample_data_wide
输出
现在我们可以看到只有墨西哥数据集一半大小的Tibble。我们有Tmax和Tmin列,不再有元素或值列。