【数据整理】spread,gather,separate 和unite

数据整理

原则就是让数据变得更好用。
数据整理是一个从数据框的统计结构(变量与观测)到形式结构(行与列)的映射。他只要遵循原则:
1.每一列代表一个变量。
2.每一行代表一个观测。

整理数据对ggplot2至关重要,因为ggplot2的任务就是将变量映射到视觉属性上。

spread 和 gather

下面两个表格
在这里插入图片描述
他们其实是相同的数据,只是形式不同。左侧是宽数据(Cartesian data,笛卡尔型数据),你要通过行与列的交叉点来找对应的值。右侧是长数据(indexed data,指标型数据),你要通过指标来找对应需要的数值。我们不能简单的说哪一个更优,因为两种形式都有可能是整洁的。
注意一点,在一个形式下明确存在的缺失值,可能在另一种形式下不存在。NA确实代表了一种缺失情况,但有时数值缺失单纯是因为那里没有值。
数据整理常常需要化宽为长,称为聚集gathering,但偶尔也需要化长为宽,称为扩散spreading。tidyr包分别提供了gather()函数和spread()函数来实现以上操作。
还可以扩展到更高维的情况,但是由于数据总是用二维储存的(行与列),所以这些扩展有趣但不实用。

gather

gather()函数有四个主要参数:

  • data:需要调整的数据集;
  • key:存放原来各列名的新变量的变量名;
  • value:存放原来单元格中的值的新变量的变量名;
  • …:指定的要聚合的变量。这里可以通过枚举进行指定,A,B,C,D,或者通过范围进行指定:A:D。还可以通过用 -号指定不需要聚集的列:-E,-F。

为了让数据更好用,我们还可以增加两个另外的参数:
convert = TRUE,na.rm = TRUE
conver = TRUE 将变量从字符串变成数值型,na.rm = TRUE 则可以自动移除没有值的月份。(其实这个缺失值并不是数据的丢失,而只是因为那个时间还没有到而已。)

spread

spread()函数是gather()的逆运算,你可以将数据化长为宽。它同样有gather()函数的几个参数。你需要指定需要转换的data,以及key和value对应的列名。

separate 和unite

spread和gather函数可以帮你解决数据中的变量放错位置的问题。而separate(分离)和unite(合并)则是为了解决以下问题:多个变量挤在了同一个列中。
separate()函数可以轻而易举地将这一混杂的列拆分成多个变量,它包含了以下四个主要参数:

  • data:需要调整的数据框;
  • col:需要进行拆分的列的列名;
  • into:拆分后新生成变量的列名,格式为字符型向量;
  • sep:对如何拆分原变量的描述,其可以是正则表达式,如_表示通过下划线拆分,或[^a-z]表示通过任意非字母字符拆分,或一个指定位置的整数。

如果变量被一种更复杂的形式混合在了一起,试试extract()函数。
另外,有时可能需要单独建立一列经由某种运算生成的变量,mutate()函数是一种方法。
unite()函数是separate()的逆运算——它可以将多列合并为一列。

举个实例:

ss_kpi_bymonth()%>%
      select(1:2,10:13)%>%
      gather(key = type,value = avg_price,"客单价","升舱客单价","到期客单价","提前续费客单价") %>%
      spread(mm,avg_price) %>%
      arrange(type)
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

Mina笑美

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值