我正在尝试为每个组标记。这是数据集。
group
1 p01
2 p01
3 p01
4 p01
5 p02
6 p01
7 p01
8 p01
9 p02
10 p02
11 p01
12 p01
结构(列表(组=结构(c(1L,1L,2L,1LL,2L、1L,4L,1L,1L、2L,2L,2L),.Label=c(“p01”,“p02”),class=“factor”)),class=“data.frame”,行。名称=c(NA,-12L))
这是预期表。在p01的情况下,预期列是从1-4中的1,然后是从6-8中的2,从11-12中的3,用于考虑连续模式。
group new_group
1 p01 1
2 p01 1
3 p01 1
4 p01 1
5 p02 1
6 p01 2
7 p01 2
8 p01 2
9 p02 2
10 p02 2
11 p01 3
12 p01 3
如何在 r 中使用 dplyr 做到这一点?
我们可以用row_number()
创建一个列,每当行的差值大于1时,为每个组
递增计数器。
library(dplyr)
df %>%
mutate(row = row_number()) %>%
group_by(group) %>%
mutate(new_group = cumsum(row - lag(row, default = first(row)) > 1) + 1) %>%
select(-row)
# group new_group
# <fct> <dbl>
# 1 p01 1
# 2 p01 1
# 3 p01 1
# 4 p01 1
# 5 p02 1
# 6 p01 2
# 7 p01 2
# 8 p01 2
# 9 p02 2
#10 p02 2
#11 p01 3
#12 p01 3
或者使用差异
更短一点
df %>%
mutate(row = row_number()) %>%
group_by(group) %>%
mutate(new_group = cumsum(c(TRUE, diff(row) > 1))) %>%
select(-row)
是这样吗?
x %>%
mutate(new_group = cumsum(group == "p01" & lag(group != "p01", default = TRUE)))
# group new_group
# 1 p01 1
# 2 p01 1
# 3 p01 1
# 4 p01 1
# 5 p02 1
# 6 p01 2
# 7 p01 2
# 8 p01 2
# 9 p02 2
# 10 p02 2
# 11 p01 3
# 12 p01 3
另一种可能性:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df <- structure(list(group = structure(c(1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L), .Label = c("p01", "p02"), class = "factor")), class = "data.frame", row.names = c(NA, -12L))
df %>%
mutate(new_group = with(rle(as.integer(group)), rep(seq_along(lengths), lengths))) %>%
group_by(group) %>%
transmute(new_group = as.integer(as.factor(new_group))) %>%
ungroup()
#> # A tibble: 12 x 2
#> group new_group
#> <fct> <int>
#> 1 p01 1
#> 2 p01 1
#> 3 p01 1
#> 4 p01 1
#> 5 p02 1
#> 6 p01 2
#> 7 p01 2
#> 8 p01 2
#> 9 p02 2
#> 10 p02 2
#> 11 p01 3
#> 12 p01 3
< sup >由reprex包(v0.3.0)于2019-08-12创建
问题内容: 我有一张桌子,看起来像: 它是按组和日期排序的。我想要一个额外的列来显示每个组的 连续 颜色’R’的顺序号。 要求的输出: 我试图将窗口函数与按组和颜色列进行分区一起使用,但它返回的输出在下面是不正确的。 错误的查询和输出: 我想知道它是否可以在SQL中使用,还是应该切换到另一种语言(例如Python)? 问题答案: 这是使用窗口功能可以完成的方式。首先,我们创建一个CTE,该CTE具
问题内容: 我正在尝试让Python解析如下的Avro模式… …并且出现以下异常: 我究竟做错了什么? 问题答案: 根据网络上的其他消息来源,我将重写您的第二个地址定义:
我使用sqlfile模式。在一个sql文件中,我编写了几个变更集: 当我像这样执行该文件时: 如何用相同的标签标记所有的3行? 谢谢
问题内容: 我如何返回在MySQL中实际上是“连续的” GROUP BY。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 采用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:
问题内容: 我正在阅读http://docs.python.org/2/library/re.html。按此在蟒re.compile(以下简称“R” - [R “模式标志”)是指原始字符串符号: 解决方案是将Python的原始字符串表示法用于正则表达式模式。反斜杠在以’r’开头的字符串文字中不会以任何特殊方式处理。所以r“ \ n”是一个包含’'和’n’的两个字符的字符串,而“ \ n”是一个包含
问题内容: 我是webworker的新手,但我设法将xmlhttprequest发送到我的rest api,并且得到了json。但我想一次又一次(循环)发送此请求,直到页面处于活动状态。我实际上想实时显示值。我想制作一个简单的Web应用程序,在其中将数据插入数据库时,我的Webworker应该显示该数据而不刷新页面。有没有更好的方法可以做到这一点。请帮助我。对不起,英语不好。 问题答案: 您可