原始的数据及期望的结果
原始的数据结构如下:
library(dplyr)library(magrittr)tmp> tmp x y1: 1 a2: 1 b3: 2 c4: 1 d5: 2 e6: 2 f
任务有两种:
根据x列的类别,把y全部合并到一个内容中,如下:
x new <dbl> <chr>1 1 a.b.d2 2 c.e.f
依然保留所有的x列,但是y列还是按照x列合并
x y new <dbl> <fct> <chr>1 1 a a.b.d2 1 b a.b.d3 2 c c.e.f4 1 d a.b.d5 2 e c.e.f6 2 f c.e.f
任务1的实现
其实这个任务,目的非常的明确,那么,如何快速来实现呢?从思路上来说,其实无非就是分组,然后合并即可,简单如下:
tmp%>%group_by(x)%>%summarise(new=paste0(y,collapse = ".")) #分组之后用summarize来操作一把即可#结果如下: x new <chr>1 1 a.b.d2 2 c.e.f
当时因为没有好好理解分组与summarize的操作,以为summarize只能作一些数学的运算,其实paste0之类的,完全是可以的,比如说,计算分组之后,这些字符串的其它的运算,比如进一步算字符串的个数等:
tmp%>%group_by(x)%>%summarise(new=paste0(y,collapse = ".")%>%nchar()) x new <int>1 1 52 2 5#结果如下:# A tibble: 2 x 2 x new <int>1 1 52 2 5
想想也是惭愧,这个本来是一个很简单的事情,却因为思维的固化没想到。
任务2
相比任务1,任务2也是类似,用mutate生成新列即可:
tmp%>%group_by(x)%>%mutate(new=paste0(y,collapse = "."))#结果如下: x y new <chr>1 1 a a.b.d2 1 b a.b.d3 2 c c.e.f4 1 d a.b.d5 2 e c.e.f6 2 f c.e.f
是不是挺简单的?只要分组之后,啥都好说
任务1的一个骚操作
说到任务1,原来为了解决这个问题,看到一个骚操作:
library(data.table)tmpdata.table(tmp)tmp[,lapply(.SD,paste0,collapse = "."),by=x]
可能重点就是data.table里的一些使用,不过个人不熟,只能照代码来弄一下,其意思就是,将原来的数据,按照x列分之后进行连接,结果是一样的;重点是一定要加载data.table包并且把数据转成data.table的格式。
> tmp[,lapply(.SD,paste0,collapse = "."),by=x] x y1: 1 a.b.d2: 2 c.e.f
其它小知识
用到summarize之后,看了下帮助文件,其实里面关于生成的数据,分组怎么保留,有个.groups参数,值得去了解一下。
mtcars %>% group_by(am) %>% summarise(mpg = sum(mpg), .groups = 'drop')# A tibble: 2 x 2# am mpg#* #1 0 326.#2 1 317.#结果无分组mtcars %>% group_by(am, vs) %>% summarise(mpg = sum(mpg), .groups = 'drop')# A tibble: 4 x 3# am vs mpg#* #1 0 0 181.#2 0 1 145.#3 1 0 118.#4 1 1 199.#结果按照am,vs分组> mtcars %>%+ group_by(am, vs) %>%+ summarise(mpg = sum(mpg), .groups = 'keep')# A tibble: 4 x 3# Groups: am, vs [4] am vs mpg 1 0 0 181.2 0 1 145.3 1 0 118.4 1 1 199.#丢弃最后一个分组> mtcars %>%+ group_by(am, vs) %>%+ summarise(mpg = sum(mpg), .groups = 'drop_last')# A tibble: 4 x 3# Groups: am [2] am vs mpg 1 0 0 181.2 0 1 145.3 1 0 118.4 1 1 199.
这一类的分组是否保留,影响到下一步的操作,值得注意一下。
好了,今天的分享就到这里,大家周末愉快。
参考文献
1.https://stackoverflow.com/questions/62140483/how-to-interpret-dplyr-message-summarise-regrouping-output-by-x-override
往期回顾:
01
基本概念
从零开始学R-001篇-程序安装
从零开始学R-002篇-向量
从零开始学R-003篇-数据框
从零开始学R-004篇-列表
从零开始学R-005篇-矩阵
数据结构-006篇-数组实例
数据结构-007篇-因子
数据运算-008篇-数学与逻辑运算
数据运算-009篇-矩阵运算简单介绍
数据运算-010篇-内置的一般数学计算函数
数据运算-011篇-内置的统计概率函数
数据运算-012篇-集合的操作
逻辑运算-013篇-条件语句
循环语句-014篇-for与while
循环语句-015篇-apply家族
定位函数-016篇-which函数打天下
字符处理-017篇-paste函数
字符处理-018篇-grep,substr,sub等函数
数据运算-019篇-统计函数初体验median与mad
数据运算-020篇-统计函数初体验之分位数quantile
数据运算-021篇-统计函数初体验之差分diff函数
数据运算-022篇-统计函数初体验之中心化函数scale
数据运算-023篇-描述性统计分析及缺失值分析
数据运算-024篇-相关系数分析
数据运算-025篇-dplyr之slice
数据运算-026篇-数据的行拆分
02
基础作图
R的作图-001篇-barplot柱状图
R的作图-002篇-pie 作饼图
R的作图-003篇-hist 直方图
R的作图-004篇-boxplot箱线图
R的作图-005篇-核密度图与比较
R的作图-006篇-plot函数
R的作图-007篇-散点图与线性拟合
R的作图-008篇-散点图矩阵
R的作图-009篇-高密度散点图
R的作图-010篇-三维散点图
R的作图-011篇-气泡图
R的作图-012篇-马赛克图
R的作图-013篇-QQ图及原理
R的作图-014篇-lm拟合结果图解释
R的作图-015篇-ggplot2之初体验
R的作图-016篇-ggplot2之geom_point
R的作图-017篇-ggplot2之geom_jitter与rug
R的作图-018篇-ggplot2之geom_line与geom_path
R的作图-019篇-ggplot2之geom_area,geom_polygon geom_ribbon
R的作图-020篇-ggplot2之geom_bar,geom_col与geom_histogram
R的作图-021篇-ggplot2之geom_density
R的作图-022篇-ggplot2之geom_density2d
R的作图-023篇-ggplot2之geom_boxplot
R的作图-024篇-ggplot2之geom_bin2d
R的作图-025篇-ggplot2之geom_contour()
R的作图-026篇-ggplot2之geom_crossbar 与geom_count()
R的作图-027篇-ggplot2之geom_errorbar 与geom_linerange等简单作图
R的作图-028篇-ggplot2之geom_vline/hline/abline/smooth等
R的作图-029篇-ggplot2之geom_tile,geom_rect与geom_raster
R的作图-030篇-ggplot2之geom_text与geom_label
作图进阶-031篇-ggplot2之geom_violin
作图进阶-032篇-ggplot2之分面facet_grid与facet_wrap
作图进阶-033篇-ggplot2之legend
作图进阶-034篇-ggplot2之作图区的设定
作图进阶-035篇-ggalluvial之桑基图
作图进阶-036篇-ggridges之峰峦图
作图进阶-037篇-坐标轴标签重叠的优化
作图进阶-038篇-数据拟合作图分析
作图进阶-039篇-plotly包之add_XXX
作图进阶-040篇-plotly的type与mode
作图进阶-041篇-plotly的颜色设置
作图进阶-042篇-plotly中往图中增加标签
作图进阶-043篇-plotly通过add_fun灵活叠加图
作图进阶-044篇-plotly的图例legend设置
作图进阶-045篇-plotly的坐标轴Ticks设置
作图进阶-046篇-plotly设定默认的trace颜色
作图进阶-047篇-plotly中画误差棒作图进阶-048篇-plotly中的箱线图
作图进阶-049篇-plotly中的动画效果
作图进阶-050篇-plotly中二维密度与等高线
作图进阶-051篇-add_heatmap的使用
作图进阶-052篇-add_ribbons与polygons的使用
作图进阶-053篇-add_segments,add_paths与add_table
作图进阶-054篇-基于矩阵画热图
作图进阶-055篇-mesh3d画个雨伞玩玩
作图进阶-056篇-经验累积分布函数的实现
作图进阶-057篇-画个瓶子玩玩
作图进阶-058篇-plotly中的曲线旋转
作图进阶-059篇-曲线旋转后简单构造三维图形 作图进阶-060篇-曲线的拉伸 作图进阶-061篇-ggplot2中的legend排列 作图进阶-062篇-ggplot2中采用双标度 作图进阶-063篇-ggplot2中的标度 作图进阶-064篇-plotly里的gauge chart 作图进阶-065篇-plotly里的瀑布图 作图进阶-066篇-plotly里的漏斗图 作图进阶-067篇-ggplot2中标注显著性 作图进阶-068篇-ggplot2中的嵌套子图 作图进阶-069篇-r中的数据表格处理 作图进阶-070篇-再谈R中的颜色 作图进阶-071篇-再谈R中的因子 作图进阶-072篇-展现交集的韦恩图 作图进阶-073篇-用R快速生成word文档批03
作图技巧
作图技巧-001篇-facet_zoom放大局部图
作图技巧-002篇-ggplot2 中的字体设置
作图技巧-003篇-ggplot2 新版本 3.3.0的一些新功能
作图技巧-004篇-QQ图之DIY
作图技巧-005篇-plotly做3维曲面图
作图技巧-006篇-数据标记初体验
作图技巧-007篇-数据标记之geom_mark_hull进阶
作图技巧-008篇-ggforce中甜甜圈饼图的作法及其它的功能
作图技巧-009篇-ggplot作图时的因子排序
作图技巧-010篇-plot_ly中的mesh3d
作图技巧-011篇-ggplot_build中的数据提取实现histogram与density同步叠加
作图技巧-012篇-ggplot中的stat_sum等系列
作图技巧-013篇-ggplot分面图的标签设置
作图技巧-014篇-不同的样条曲线bspline
作图技巧-015篇-大家一起来拼图
作图技巧-016篇-拼图系列之2-cowplot
作图技巧-017篇-拼图工具之3-patchwork
作图技巧-018篇-第二坐标轴在ggplot2中的实现
作图技巧-019篇-draw_key_XXX系列
作图技巧-020篇-更改ggplot2作图的默认设置
作图技巧-021篇-增加基于表达式的坐标轴标题
04
R的技巧
R的技巧-001篇-快速从列表中提取元素组成数据框
R的技巧-002篇-快速对数据框中满足条件的列进行替换
R的技巧-003篇-数字的不同取整与进位
R的技巧-004篇-文件名提取分类成表
R的技巧-005篇-直方图与分布图的叠加
R的技巧-006篇-ggplot2中的cut类函数
R的技巧-007篇-assign与get:动态生成变量与获取变量
R的技巧-008篇-pretty函数实现完美分割点
R的技巧-009篇-数据填充
R的技巧-010篇-dplyr之slice,mutate,summarize 与do
R的技巧-011篇-dnorm,pnorm与qnorm傻傻分不清
R的技巧-012篇-缝缝补补改创建好的ggplot2图
R的技巧-013篇-approx函数插值
R的技巧-014篇-openxls包处理excel数据
欢迎关注与转发,如有不懂,可以共同探讨,在后台留言或者是扫码下方。
你点的每一个在看,我都认真当成了喜欢