R:各列数值的滚动比

13z8s7eq  于 2023-03-10  发布在  其他
关注(0)|答案(3)|浏览(101)

我希望得到每列值的滚动比率。例如,第5/第1,第6/第2等,并在一个新的 Dataframe 的结果。

df <- data.frame(Group = rep(c('A', 'B', 'C', 'D'), each = 4),
                 score_1 = 1:16,
                 score_2 = 5:20)

对于上面的示例数据,我希望每行(n)(从第5行开始)除以n-4,在这种情况下,将创建下面的结果表。

5.0  1.8
3.0  1.7
2.3  1.6
2.0  1.5
1.8  1.4
1.7  1.4
1.6  1.4
1.5  1.3
1.4  1.3
1.4  1.3
1.4  1.3
1.3  1.3
nkhmeac6

nkhmeac61#

您可以使用head()tail()

tail(df, -4)[-1] / head(df, -4)[-1]

# Also
# (\(x, n) tail(x, n) / head(x, n))(df[-1], -4)
#
#     score_1  score_2
# 5  5.000000 1.800000
# 6  3.000000 1.666667
# 7  2.333333 1.571429
# 8  2.000000 1.500000
# 9  1.800000 1.444444
# 10 1.666667 1.400000
# 11 1.571429 1.363636
# 12 1.500000 1.333333
# 13 1.444444 1.307692
# 14 1.400000 1.285714
# 15 1.363636 1.266667
# 16 1.333333 1.250000

对于dplyr,您可以使用lag()

library(dplyr)

df %>%
  mutate(across(-Group, ~ .x / lag(.x, 4L)))
but5z9lq

but5z9lq2#

可以将每个原始向量除以其滞后版本,如下所示:

x <- 1:16
x / dplyr::lag(x, n = 4L)
#>  [1]       NA       NA       NA       NA 5.000000 3.000000 2.333333 2.000000
#>  [9] 1.800000 1.666667 1.571429 1.500000 1.444444 1.400000 1.363636 1.333333

创建于2023年3月9日,使用reprex v2.0.2

o8x7eapl

o8x7eapl3#

您可以直接划分 Dataframe 及其子集。

df[5:nrow(df), 2:3]/df[(5:nrow(df)) - 4, 2:3]

    score_1  score_2
5  5.000000 1.800000
6  3.000000 1.666667
7  2.333333 1.571429
8  2.000000 1.500000
9  1.800000 1.444444
10 1.666667 1.400000
11 1.571429 1.363636
12 1.500000 1.333333
13 1.444444 1.307692
14 1.400000 1.285714
15 1.363636 1.266667
16 1.333333 1.250000

相关问题