也谈R语言的嵌套和还原

所谓的嵌套函数可用于将指定列的对应元素‘折叠’为list,缩小原有数据框的大小。Tidyr提供两个函数进行嵌套合并操作,nest()将分组数据框转换为嵌套数据框,即包含列表列的数据框,转换后分组列只会保留每个值的唯一值,与之对应合并列中的所有值会合并为list对象生成新列,这里需要注意的是所有合并列都会合并在一起生成一列,chop()函数稍微有些区别,合并列会分别进行合并,而不是全部整合在一起。#所有合并列全部一起nest为新列nest(.data, ..., .key = deprecated())#合并列分别进行nestchop(data, cols)# 将除Species的列进行nest操作,生成的新列的元素都为list对象# 其中nest()合并为一列,chop()分别对各列进行合并iris %>% nest(data = -Species)iris %>% chop(cols = -Species)nest_vars <- names(iris)[1:4]iris %>% nest(data = one_of(nest_vars))iris %>% chop(cols = one_of(nest_vars))# 分别组合多列进行合并,chop()不支持此操作iris %>% nest(petal = starts_with("Petal"), sepal = starts_with("Sepal"))# 先进行分组操作,分组变量之外的变量会进行nest合并iris %>% group_by(Species) %>% nest()# 对不同分组建立线性模型mtcars %>%group_by(cyl) %>%nest() %>%mutate(models = lapply(data, function(df) lm(mpg ~ wt, data = df)))与之相反,unnest()函数和unchop()可以进行数据框展开,把折叠的list对象展开。#unnest数据框对象unnest(data, cols, ..., keep_empty = FALSE, ptype = NULL,names_sep = NULL, names_repair = "check_unique",.drop = deprecated(), .id = deprecated(), .sep = deprecated(),.preserve = deprecated())unchop(data, cols, keep_empty = FALSE, ptype = NULL)df <- tibble(x = 1:4,y = list(NULL, 1:2, 3, NULL),z = list('d', c('a', "b"), "c", NULL))# 展开y和z列,并且删除值都为NULL的行,不全为NULL的行保留df %>% unnest(c(y, z))df %>% unchop(c(y, z))# 展开y和z列,设置keep_empty = TRUE保留所有行df %>% unnest(c(y, z), keep_empty = TRUE)df %>% unchop(c(y, z), keep_empty = TRUE)# 展开y和z列,设置展开后列的类型df %>% unchop(c(y, z), ptype = tibble(y = character(), z = character()))# 先使用y列展开,在使用z展开,和直接使用y,z展开不同,y和z会进行笛卡尔积df %>% unchop(y) %>% unchop(z)6. 缺失值处理tidyr包提供了简单的缺失值处理方法,包括替换,填充,删除等。#使用给定值替换每列的缺失值replace_na(data, replace = list(), ...)data:为数据框replace:替换值用于替换每个列中NAlibrary(dplyr)df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"))#以0替换x中的NA,以unknown替换y中的NAdf %>% replace_na(list(x = 0, y = "unknown"))#以前一个值填充缺失值,默认自上向下填充fill(data, ..., .direction = c("down", "up"))data:为数据框…:指定需要被填充的列, 可用于选择两列之间的所有列col1:coln, 排除列-coln.direction :填充的方向,默认为down,自上向下填充df <- data.frame(x = 1:5, y = c(10, NA, 15, NA, 20))#自上向下替换NA值df %>% fill(y)df %>% fill(y, .direction = "down")#自下向上替换NA值df %>% fill(y, .direction = "up")#填充以创建完整的序列值向量full_seq(x, period, tol = 1e-06)x:数值向量period:观测值间的间隔,并检测现有数据是否与这个间隔匹配,,不匹配时报错#返回序列1:6full_seq(c(1, 2, 4, 6), 1)#period值与原数据间隔不匹配,报错Error: `x` is not a regular sequence.full_seq(c(1, 2, 4, 6), 2)#返回序列1:13,间隔为2full_seq(c(1, 5, 9, 13), 2)#删除包含缺失值的行drop_na(data, ...)data:为数据框…:指定需要被填充的列, 可用于选择两列之间的所有列col1:coln, 排除列-colndf <- data_frame(x = c(1, 2, NA), y = c("a", NA, "b"))#删除变量x中NA对应的行df %>% drop_na(x)#删除变量y中NA对应的行df %>% drop_na(y)#未设置列,删除变量x和y中NA对应的行df %>% drop_na()#转换隐式的缺失值为显式的complete(data, ..., fill = list())data:为数据框…:指定需要扩展的列,每个输入列都作为一个独立的参数用于扩展数据框。其中使用crossing或者直接输入列作为参数时,会使用每个列中的元素进行扩展,即使生成的组合在原数据框中不存在;而使用nesting函数时,返回的每个列元素的组合必须在原数据框中存在。fill:用于设置填充值以替换NAdf <- data_frame(group = c(1:2, 1),item_id = c(1:2, 2),item_name = c("a", "b", "b"),value1 = 1:3,value2 = 4:6)#以item_id和item_name中的每个元素扩展原数据框, 组合后的缺失值以NA代替df %>% complete(item_id, item_name)df %>% complete(crossing(item_id, item_name))#以item_id和item_name中的每个元素扩展原数据框, 并以给定值替换缺失值df %>% complete(item_id, item_name, fill = list(group = 0, value1 = 0, value2 = 0))#以item_id和item_name中的每个元素扩展原数据框,只返回原数据框中存在的组合df %>% complete(nesting(item_id, item_name))#保留group,以item_id和item_name中的每个元素扩展原数据框,只返回原数据框#中item_id和item_name存在的组合df %>% complete(group, nesting(item_id, item_name))df %>% complete(group, nesting(item_id, item_name), fill = list(value1 = 0, value2 = 0))#保留group,以item_id和item_name中的每个元素扩展原数据框,返回所有item_id#和item_name存在的组合df %>% complete(group, crossing(item_id, item_name))df %>% complete(group, crossing(item_id, item_name), fill = list(value1 = 0, value2 = 0))

(0)

相关推荐

  • rpy2库 | 在jupyter中调用R语言代码

    在数据分析中,Python和R各有千秋,虽然Python或R都能在数据分析打通关,从采集.清洗(预处理).分析.可视化,但是在不同的环节,不同的语言易用程度不同.Python胜在干脏活累活,诸如数据采 ...

  • R最快且比dplyr最高效的大数据处理R包:tidyfst

    写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计算,也就38个. 随着扩增子的平稳,我逐渐转入宏基因组,软件更多,平台跨度更大,R语言显示出来 ...

  • ggplot可视化表格,来替代Excal吧

    写在前面 表格用于展示原始数据,用于展示处理程度最低的数据,对于了解研究的最原始的状况,最真实的尚未人工修饰的十分重要. ggplot 展示表格 library(ggpubr) df <- he ...

  • 特征选择方法最全总结!

    上个月扫读完<阿里云天池大赛赛题解析>[1]后,看到书中对特征选择的讲述,于是便打算借此机会,系统梳理下各种特征选择方法.如有不足,还望指正. 一.背景介绍 在处理结构型数据时,特征工程中 ...

  • Python数据可视化库seaborn的使用总结

    seaborn是python中的一个非常强大的数据可视化库,它集成了matplotlib,下图为seaborn的官网,如果遇到疑惑的地方可以到官网查看.http://seaborn.pydata.or ...

  • R绘图笔记 | 热图绘制

    关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘图笔记 | 二维散点图与统计直方图组合 R绘图笔记 | 散点分 ...

  • Python用T-SNE非线性降维技术拟合和可视化高维数据iris鸢尾花、MNIST 数据

    原文链接:http://tecdat.cn/?p=24002 T-distributed Stochastic Neighbor Embedding (T-SNE) 是一种可视化高维数据的工具.T-S ...

  • tidyr总结篇-续

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. tidyr总结篇  gather(data,key="" ...

  • 如何获取R自带数据集与R包数据集说明文档?

    学习R的时候,我们都会用到R到自带数据集,或者第三方R包内含的数据集,比如iris鸢尾花数据. 有数据集,比如上面这个iris数据,但是我们不了解该数据集具体背景的话,就难以理解它的分析目的,统计分析 ...

  • Python之pypmml:pypmml的简介、安装、使用方法之详细攻略

    Python之pypmml:pypmml的简介.安装.使用方法之详细攻略 pypmml的简介 pypmml是一个python pmml评分库,它实际上是用于PMML4S的python api.pmml ...