使用R语言进行长宽数据转换
听我说一句:这是我的学习笔记,仅供参考
长数据
宽数据
使用pivot_longer
和pivot_wider
进行长宽数据转换,这两个函数都是来自于tidyr
包。
整洁的数据
整洁数据的概念是针对脏数据而言的。根据 Tidiverse 的定义,满足以下3个条件的数据,就是整洁的:
- 每一列是一个变量(variables)
- 每一行是一个观测(observations)
- 每个单元格是一个值(values)
variables 变量
observations 观察值,观察,观察值;观察结果;(观察后发表的)言论(observation 的复数形式)
values n.价值;值(value 的复数);价值观念,价值标准;vt. 重视;估价,评价(value 的第三人称单数)
上图中,竖着的每一列是一个变量;横着的每一行是一个观测;每个单元格中是一个值。
我们称这样的数据是整洁的。
什么是长数据
长数据一般是指数据集中的变量没有做明确的细分,即变量中至少有一个变量中的元素存在值严重重复循环的情况(可以归为几类),表格整体的形状为长方形,即 变量少而观察值多。例如:
什么是宽数据
宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复循环的情况也无法归类。数据总体的表现为 变量多而观察值少。
为什么要进行长数据—宽数据的转换
学好数据分析
有时候需要输入长格式的表格,有时候需要输入宽格式的表格,必须进行相应的转换才能满足分析需求。
长宽变换直白动图
使用的示例数据
getwd()
rm(list = ls())
library(tidyr)
library(dplyr)
library(readxl)
#使用的数据
relig_income
宽数据变为长数据–参数pivot_longer
pivot_longer(
data,
cols,
names_to = "name",
names_prefix = NULL,
names_sep = NULL,
names_pattern = NULL,
names_ptypes = NULL,
names_transform = NULL,
names_repair = "check_unique",
values_to = "value",
values_drop_na = FALSE,
values_ptypes = NULL,
values_transform = NULL,
...
)
data:自己所需要转换的数据集
cols: 要转换为更长格式的列。
names_to:一个字符向量,指定要根据存储在 cols 指定的数据的列名中的信息创建一个或多个新列。
如果长度为 0,或者如果提供了 NULL,则不会创建任何列。
如果长度为 1,将创建一个包含 cols 指定的列名的列。
如果长度>1,将创建多个列。在这种情况下,必须提供 names_sep 或 names_pattern 之一来指定如何拆分列名。您还可以利用两个额外的字符值:
NA 将丢弃列名的相应组件。
“.value”表示列名的相应组件定义了包含单元格值的输出列的名称,完全覆盖 values_to。
names_prefix:用于从每个变量名称的开头删除匹配文本的正则表达式。
names_sep, names_pattern:如果 names_to 包含多个值,则这些参数控制列名称的分解方式。
names_sep 采用与单独()相同的规范,可以是数字向量(指定要中断的位置),也可以是单个字符串(指定要拆分的正则表达式)。
names_pattern 采用与 extract() 相同的规范,一个包含匹配组 (()) 的正则表达式。
如果这些参数没有给您足够的控制权,请使用 pivot_longer_spec() 创建一个规范对象并根据需要手动处理。
names_ptypes, values_ptypes:(可选)列名-原型对的列表。或者,可以提供一个空原型,它将应用于所有列。原型(或简称 ptype)是一个零长度向量(如 integer() 或 numeric()),它定义了向量的类型、类和属性。如果您想确认创建的列是您期望的类型,请使用这些参数。请注意,如果要更改(而不是确认)特定列的类型,则应改用 names_transform 或 values_transform。
出于向后兼容的原因,提供 list() 被解释为与 NULL 相同,而不是在所有列上使用列表原型。预计这种情况在未来会有所改变。
names_transform, values_transform:(可选)列名-函数对的列表。或者,可以提供一个函数,该函数将应用于所有列。如果您需要更改特定列的类型,请使用这些参数。例如,names_transform = list(week = as.integer) 会将名为 week 的字符变量转换为整数。
如果未指定,则从 names_to 生成的列的类型将为字符,从 values_to 生成的变量的类型将是用于生成它们的输入列的常见类型。
names_repair:如果输出的列名无效会怎样?如果列重复,默认值“check_unique”会出错。使用“minimal”允许在输出中重复,或“unique”通过添加数字后缀来消除重复。有关更多选项,请参见 vctrs::vec_as_names()。
values_to:一个字符串,指定要从存储在单元格值中的数据创建的列的名称。如果 names_to 是包含特殊 .value 标记的字符,则该值将被忽略,并且 value 列的名称将从现有列名的一部分派生。
values_drop_na:如果为 TRUE,将删除 value_to 列中仅包含 NA 的行。这有效地将显式缺失值转换为隐式缺失值,并且通常仅应在数据中的缺失值由其结构创建时使用。
长数据变宽数据–参数pivot_wider
参考文章:https://blog.csdn.net/Ayue0616/article/details/124242661
data
: 输入的长格式数据框。
names_from
: 用于从长格式中创建新列名的列。
values_from
: 用于填充新列的值的列。
values_fill
: 用于填充缺失值的默认值。
values_fn
: 应用于 values_from
列的聚合函数。
wide_data <- pivot_wider(data = long_data,
names_from = Measurement_Year,
values_from = Measurement_Value)
``
wide_data <- pivot_wider(data = long_data,
names_from = Measurement_Year,
values_from = Measurement_Value)