给rdf中每一组唯一的值赋一个数字向量



我有一个包含200万(2m)行的df,其中包含按唯一id分组的不同条目的列。例如

df <- df %>% mutate(A = c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6 6, ... , 2m, 2m, 2m, 2m)

我想创建另一列,比如B,我将把数字向量c(2008:2021)中的每个x分配给列a中的每个唯一组

我已经试过了:

df <- df %>% mutate(B = c(2008:2021)[match(B, unique(A)]

但这并不扩展到df的所有行。它只将向量中的每个x赋值给向量的每一组唯一值,直到向量的范围为2021,然后停止。为剩下的行保留NAs。然而,我想要的是c(2008:2021)从开始(2008)开始分配到B中其他组的唯一值,当它到达2021。

我也试过使用rep()函数,length.out = nrow(df),但仍然不起作用。即,在mutate函数中,

df <- df %>% mutate(B = rep(c(2008:2021)[match(B, unique(A)], length.out = nrow(df) 

即使使用了each和times参数,也会产生不想要的结果。

请问,谁能告诉我做这件事的正确有效的方法?多谢。欢呼,Davidmac

我们可以使用%%来做到这一点

library(dplyr)
years <- 2008:2021
df %>% 
mutate(B = years[(as.integer(factor(A, levels = unique(A)))-1) %% 
length(years) + 1])

数据
df <- data.frame(A = rep(paste0("v", 1:85), each = 5))

最新更新