由一个组逐列串联
栏目: JavaScript · 发布时间: 5年前
内容简介:翻译自:https://stackoverflow.com/questions/34778422/progressive-concatenation-of-a-column-by-a-group
参见英文答案 > Cumulatively paste (concatenate) values grouped by another variable 4个
假设我有这个输入:
ID date_1 date_2 str 1 1 2010-07-04 2008-01-20 A 2 2 2015-07-01 2011-08-31 C 3 3 2015-03-06 2013-01-18 D 4 4 2013-01-10 2011-08-30 D 5 5 2014-06-04 2011-09-18 B 6 5 2014-06-04 2011-09-18 B 7 6 2012-11-22 2011-09-28 C 8 7 2014-06-17 2013-08-04 A 10 7 2014-06-17 2013-08-04 B 11 7 2014-06-17 2013-08-04 B
我想通过组变量ID逐步连接str列的值,如以下输出所示:
ID date_1 date_2 str 1 1 2010-07-04 2008-01-20 A 2 2 2015-07-01 2011-08-31 C 3 3 2015-03-06 2013-01-18 D 4 4 2013-01-10 2011-08-30 D 5 5 2014-06-04 2011-09-18 B 6 5 2014-06-04 2011-09-18 B,B 7 6 2012-11-22 2011-09-28 C 8 7 2014-06-17 2013-08-04 A 10 7 2014-06-17 2013-08-04 A,B 11 7 2014-06-17 2013-08-04 A,B,B
我尝试使用此代码的ave()函数:
within(table, { Emp_list <- ave(str, ID, FUN = function(x) paste(x, collapse = ",")) })
但它提供了以下输出,这不是我想要的:
ID date_1 date_2 str 1 1 2010-07-04 2008-01-20 A 2 2 2015-07-01 2011-08-31 C 3 3 2015-03-06 2013-01-18 D 4 4 2013-01-10 2011-08-30 D 5 5 2014-06-04 2011-09-18 B,B 6 5 2014-06-04 2011-09-18 B,B 7 6 2012-11-22 2011-09-28 C 8 7 2014-06-17 2013-08-04 A,B,B 10 7 2014-06-17 2013-08-04 A,B,B 11 7 2014-06-17 2013-08-04 A,B,B
当然,我想避免循环,因为我在大型数据库上工作.
使用Reduce()的ave()怎么样? Reduce()函数允许我们在计算结果时累积结果.因此,如果我们使用paste()运行它,我们可以累积粘贴的字符串.
f <- function(x) { Reduce(function(...) paste(..., sep = ", "), x, accumulate = TRUE) } df$str <- with(df, ave(as.character(str), ID, FUN = f)
它给出了更新的数据帧df
ID date_1 date_2 str 1 1 2010-07-04 2008-01-20 A 2 2 2015-07-01 2011-08-31 C 3 3 2015-03-06 2013-01-18 D 4 4 2013-01-10 2011-08-30 D 5 5 2014-06-04 2011-09-18 B 6 5 2014-06-04 2011-09-18 B, B 7 6 2012-11-22 2011-09-28 C 8 7 2014-06-17 2013-08-04 A 10 7 2014-06-17 2013-08-04 A, B 11 7 2014-06-17 2013-08-04 A, B, B
注意:函数(…)paste(…,sep =“,”)也可以是函数(x,y)paste(x,y,sep =“,”). (感谢Pierre Lafortune)
翻译自:https://stackoverflow.com/questions/34778422/progressive-concatenation-of-a-column-by-a-group
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 作为项目经理应该串联起哪些流程
- 渗透体系的本质是知识点的串联
- KOA2 compose 串联中间件实现(洋葱模型)
- 微软安卓启动器将加入时间线功能,串联 Windows 服务
- 使用 Async-hooks 串联 HTTP 请求上下文
- 『中级篇』docker之CI/CD持续集成-整个流程串联(75)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。