我有一个包含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))