R:将dplyr组标签添加为数字
我无法理解这一定是一项简单的任务。如何将组标签获取为连续数字R:将dplyr组标签添加为数字,r,dplyr,grouping,R,Dplyr,Grouping,我无法理解这一定是一项简单的任务。如何将组标签获取为连续数字 library(dplyr) set.seed(1) df <- data.frame(id = sample(c('a','b'), 20, T), name = sample(c('N1', 'N2', 'N3'), 20, T), val = runif(20)) %>% group_by(id) %>% arrange(id, na
library(dplyr)
set.seed(1)
df <- data.frame(id = sample(c('a','b'), 20, T),
name = sample(c('N1', 'N2', 'N3'), 20, T),
val = runif(20)) %>%
group_by(id) %>%
arrange(id, name)
请注意,name
的值可以是任何值,并且肯定不会像示例中那样以数字作为后缀(否则我可以执行sub(“^N”,”,df$name)
我正在寻找一些不同于1:n()
解决方案的东西,例如。我们可以这样做
df %>%
group_by(id) %>%
mutate(group_no = cumsum(c(TRUE, name[-1] != name[-n()])))
或与
匹配
df %>%
group_by(id) %>%
mutate(group_no = match(name, unique(name)))
# A tibble: 20 x 4
# Groups: id [2]
# id name val group_no
# <fct> <fct> <dbl> <int>
# 1 a N1 0.647 1
# 2 a N1 0.530 1
# 3 a N1 0.245 1
# 4 a N2 0.693 2
# 5 a N2 0.478 2
# 6 a N2 0.861 2
# 7 a N3 0.821 3
# 8 a N3 0.0995 3
# 9 a N3 0.662 3
#10 b N1 0.553 1
#11 b N1 0.0233 1
#12 b N1 0.519 1
#13 b N2 0.783 2
#14 b N2 0.789 2
#15 b N2 0.477 2
#16 b N2 0.438 2
#17 b N2 0.407 2
#18 b N3 0.732 3
#19 b N3 0.0707 3
#20 b N3 0.316 3
df%>%
分组依据(id)%>%
变异(组号=匹配(名称,唯一(名称)))
#一个tibble:20x4
#组别:id[2]
#id名称val组\u编号
#
#1 a N1 0.647 1
#2 a N1 0.530 1
#3 a N1 0.245 1
#4 a N2 0.693 2
#5 a N2 0.478 2
#6 a N2 0.861 2
#7 a N3 0.821 3
#8 a N3 0.0995 3
#9 a N3 0.662 3
#10 b N1 0.553 1
#11 b N1 0.0233 1
#12 b N1 0.519 1
#13 b N2 0.783 2
#14 b N2 0.789 2
#15 b N2 0.477 2
#16 b N2 0.438 2
#17 b N2 0.407 2
#18 b N3 0.732 3
#19 b N3 0.0707 3
#20 b N3 0.316 3
在这种情况下,我认为应该做一些简单的事情:
df %>%
mutate(group_no = as.integer(name))
行得通
# A tibble: 20 x 4
# Groups: id [2]
id name val group_no
<fct> <fct> <dbl> <int>
1 a N1 0.647 1
2 a N1 0.530 1
3 a N1 0.245 1
4 a N2 0.693 2
5 a N2 0.478 2
6 a N2 0.861 2
7 a N3 0.821 3
8 a N3 0.0995 3
9 a N3 0.662 3
10 b N1 0.553 1
11 b N1 0.0233 1
12 b N1 0.519 1
13 b N2 0.783 2
14 b N2 0.789 2
15 b N2 0.477 2
16 b N2 0.438 2
17 b N2 0.407 2
18 b N3 0.732 3
19 b N3 0.0707 3
20 b N3 0.316 3
#一个tible:20x4
#组别:id[2]
id名称val组\u编号
1 a N1 0.647 1
2 a N1 0.530 1
3 a N1 0.245 1
4 a N2 0.693 2
5 a N2 0.478 2
6 a N2 0.861 2
7 a N3 0.821 3
8 a N3 0.0995 3
9 a N3 0.662 3
10 b N1 0.553 1
11 b N1 0.0233 1
12 b N1 0.519 1
13 b N2 0.783 2
14 b N2 0.789 2
15 b N2 0.477 2
16 b N2 0.438 2
17 b N2 0.407 2
18 b N3 0.732 3
19 b N3 0.0707 3
20 b N3 0.316 3
这是一个使用左键连接的解决方案
df %>%
left_join(df %>%
group_by(id, name) %>%
summarise(group_no = row_number()))
这是一个非常好的技巧!谢谢!这实际上是我经常犯的错误:)很好-但只适用于因子(如我的示例中所示)。我倾向于不想要任何因素。@user3375672确实如此。但是你可以做mutate(group_no=as.integer(as.factor(name)))
在这种情况下,它仍然可以工作-这是很好的一点。我会接受这个简单的建议,尽管其他建议也很好。组索引(df,name)
,但不幸的是……你在帖子中找到了一些解决方法。
df %>%
left_join(df %>%
group_by(id, name) %>%
summarise(group_no = row_number()))