r - 如何在r中合并表中特定列的后续值
问题描述
我只想将重复行与特定内容合并。
假设我有以下数据框
df:
user action
1 A
1 A
1 B
1 B
2 A
2 C
2 C
2 A
2 A
我只想合并后续操作A
。
所以结果是:
user action
1 A
1 B
1 B
2 A
2 C
2 C
2 A
我怎么能在 R 中做到这一点?
谢谢
解决方案
只要没有其他条件匹配,这将适用于:
library(magrittr)
library(dplyr)
首先创建一个虚拟列,告诉我们它是否是先前“A”的直接副本:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action))
# A tibble: 9 x 3
# Groups: user [2]
user action condition
<fct> <fct> <chr>
1 1 A ANA
2 1 A ATRUE
3 1 B BFALSE
4 1 B BTRUE
5 2 A ANA
6 2 C CFALSE
7 2 C CTRUE
8 2 A AFALSE
9 2 A ATRUE
然后,您可以过滤掉每个用户中 A 跟随另一个 A 的行:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action)) %>%
filter(condition!="ATRUE")
# A tibble: 7 x 3
# Groups: user [2]
user action condition
<fct> <fct> <chr>
1 1 A ANA
2 1 B BFALSE
3 1 B BTRUE
4 2 A ANA
5 2 C CFALSE
6 2 C CTRUE
7 2 A AFALSE
您甚至不必显示虚拟列,因为您只需过滤掉与“ATRUE”匹配的行,然后选择您关心的两个变量:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action)) %>%
filter(condition!="ATRUE") %>% select(user,action)
# A tibble: 7 x 2
# Groups: user [2]
user action
<fct> <fct>
1 1 A
2 1 B
3 1 B
4 2 A
5 2 C
6 2 C
7 2 A
推荐阅读
- javascript - 使用 CSS 或 JS 关闭过渡菜单
- php - AMP 项目不会将 PHP 代码作为 Form 甚至作为 echo 执行
- dynamics-crm - 虚拟实体 - Cosmos DB 连接器问题
- java - 在java中为什么总是子类调用超类构造函数?我要内部流
- animation - 如何在 Scaffold 页面之间设置 Navigator 动画背景颜色
- mysql - 将 DAO QueryDef 保存到临时查询并将结果输出到 Excel
- node.js - 使用 node.js 'util' 来承诺返回错误
- glib - 使用 GDBus 发射 D-Bus 信号而不拥有知名名称
- python - pygame中的乒乓球
- php - 由于 json_decode 不起作用,如何在 PHP 中解析这种 json 字符串?