使用R进行长宽数据转换

使用R语言进行长宽数据转换

听我说一句:这是我的学习笔记,仅供参考

长数据

宽数据

使用pivot_longerpivot_wider进行长宽数据转换,这两个函数都是来自于tidyr包。

整洁的数据

整洁数据的概念是针对脏数据而言的。根据 Tidiverse 的定义,满足以下3个条件的数据,就是整洁的:

  1. 每一列是一个变量(variables)
  2. 每一行是一个观测(observations)
  3. 每个单元格是一个值(values)

058fbde98958682058d2fcd5075c1611.png

variables 变量

observations 观察值,观察,观察值;观察结果;(观察后发表的)言论(observation 的复数形式)

values n.价值;值(value 的复数);价值观念,价值标准;vt. 重视;估价,评价(value 的第三人称单数)

上图中,竖着的每一列是一个变量;横着的每一行是一个观测;每个单元格中是一个值。

我们称这样的数据是整洁的。

什么是长数据

长数据一般是指数据集中的变量没有做明确的细分,即变量中至少有一个变量中的元素存在值严重重复循环的情况(可以归为几类),表格整体的形状为长方形,即 变量少而观察值多。例如:

在这里插入图片描述

什么是宽数据

宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复循环的情况也无法归类。数据总体的表现为 变量多而观察值少。

在这里插入图片描述

为什么要进行长数据—宽数据的转换

学好数据分析

有时候需要输入长格式的表格,有时候需要输入宽格式的表格,必须进行相应的转换才能满足分析需求。

长宽变换直白动图

img

使用的示例数据

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值