首页 > 解决方案 > 如何按值将升序数字赋予数据框中的行

问题描述

我有一个类似的数据框:

[a][b][c]    
1 xxx a
2 xxx a
3 xxx a
4 xxx a
5 xxx b
6 xxx b
7 xxx c
8 xxx c

我需要做的是创建一个带有升序数字的新列。但是对于 [c] 的每个唯一值,数字都必须回到 1。我正在寻找这样的东西:

[a][b][c]    
1 xxx a 1
2 xxx a 2
3 xxx a 3
4 xxx a 4
5 xxx b 1
6 xxx b 2
7 xxx c 1
8 xxx c 2

标签: rdataframedplyrtidyverse

解决方案


dplyr来自的软件包tidyverse可以提供帮助。使用n()函数,您可以创建所需的索引。尝试这个:

library(tidyverse)
#Data
df <- data.frame(var1=rep(c('a','b'),4),stringsAsFactors = F)
#Mutate
df %>% arrange(var1) %>% group_by_all() %>% mutate(var2=1:n())

输出:

# A tibble: 8 x 2
# Groups:   var1 [2]
  var1   var2
  <chr> <int>
1 a         1
2 a         2
3 a         3
4 a         4
5 b         1
6 b         2
7 b         3
8 b         4

推荐阅读