我有一个数据框,其中包含一个因子列"class",其中重复了一些因子水平。还有另一个因子列,具有多个级别的"设置"。 我想创建一个新列,从"class"列中添加唯一值的计数,重新启动每个级别的"set"计数,同时保留原始列表中每个"set"值的出现顺序。每次再次出现该因子水平时,此新列只会具有重复的计数值。示例数据如下:
a <- data.frame(c(rep(LETTERS[1:3],2),LETTERS[6:8],LETTERS[1:2]),rep(set_a,11),rep(NA,11))
b <- data.frame(c(LETTERS[11:16],LETTERS[1:3],LETTERS[11:13]), rep(set_b,12),rep(NA,12))
colnames(a) <- c(class,set,count)
colnames(b) <- c(class,set,count)
c <- rbind(a,b)
c$class <- as.factor(c$class)
c$set <- as.factor(c$set)
对于上述数据,我的理想输出如下:
class set count
A set_a 1
B set_a 2
C set_a 3
A set_a 1
B set_a 2
C set_a 3
F set_a 4
G set_a 5
H set_a 6
A set_a 1
B set_a 2
K set_b 1
L set_b 2
M set_b 3
N set_b 4
O set_b 5
P set_b 6
A set_b 7
B set_b 8
C set_b 9
K set_b 1
L set_b 2
M set_b 3
假设您创建的 C 数据框中没有 "count" 列,您可以使用 dplyr 执行以下操作:
makecounter <- c %>% group_by(class, set) %>%
filter(row_number() == 1)%>%
ungroup%>%
group_by(set)%>%mutate(count = seq_along(set))
final <- left_join(c, makecounter, by = c("class","set"))