我的数据如下
data <- data.frame(
A = c(10,20,30,40,50,60,70,80,90,100),
B = c(110,120,130,140,150,160,170,180,190,200)
)
我希望创建一个新列,按行从 A 列获取每个值,并将其与 B 列中的相应值以及 B 列中的滞后 3 个值连接起来,并将其存储在数字向量中。
最终数据如下:
new_data <- data.frame(
A = c(10,20,30,40,50,60,70,80,90,100),
B = c(110,120,130,140,150,160,170,180,190,200),
c = I(list(c(10,110,NA,NA,NA),c(20,120,110,NA,NA),c(30,130,120,110,NA),c(40,140,130,120,110),c(50,150,140,130,120),c(60,160,150,140,130),c(70,170,160,150,140),c(80,180,170,160,150),c(90,190,180,170,160),c(100,200,190,180,170))
))
在我的真实数据中,我需要捕获最多 200 个滞后值,因此需要手动输入list(A, lag(B),lag(B,2),lag(B,3)....
这不是一条我想走的路。
我尝试使用 purrr::map 来实现我的结果,但我无法将滞后值放入我的向量中
data %>%
rowwise() %>%
mutate(z = list(c(A,B,map_vec(1:3, ~lag(B,.x, default = NA)))))
最终目标是计算 A 列的每个值相对于当前行 + B 列的 3 个先前值的 Percentage_rank,以确定 A 的每个点是否为异常值,即 > 75%。
我的方法是在 C 列中创建一个值的数字向量,其中包含 A 的当前值和 B 中的 4 个值,将 dplyr::percent_rank 应用于每个向量并提取每个索引 = 1 值的百分比排名(A 列值)来获得值 A 的百分比排名。
您能提供的任何指导将不胜感激。