gpt4 book ai didi

r - 根据组的第一行对组中的每一行进行变异

转载 作者:行者123 更新时间:2023-12-04 14:55:11 24 4
gpt4 key购买 nike

例如,我有一个数据框:

df <- data.frame(grp = c(1,1,1,1,1,2,2,2,2,2),
idx = c(1,2,3,4,5,1,2,3,4,5),
val = c(4,6,1,7,2,8,5,3,9,1))

我想将每行的 val 除以每组中第一行的 val。我发现的唯一方法是引入一个新专栏:
 df %>% group_by(grp) %>%
arrange(idx) %>%
mutate(t = ifelse(row_number(idx) == 1, val, 0)) %>%
mutate(val = val / sum(t))

有没有简单的方法可以做到这一点?

最佳答案

我们可以做的

 df %>%
group_by(grp) %>%
arrange(idx) %>%
mutate(val = val/sum((row_number() == 1)*val))
# A tibble: 10 x 3
# Groups: grp [2]
# grp idx val
# <dbl> <dbl> <dbl>
# 1 1 1 1.000
# 2 2 1 1.000
# 3 1 2 1.500
# 4 2 2 0.625
# 5 1 3 0.250
# 6 2 3 0.375
# 7 1 4 1.750
# 8 2 4 1.125
# 9 1 5 0.500
#10 2 5 0.125

如果我们需要除以第一个 'val' 观察值,只需执行 val[1L]
df %>%
group_by(grp) %>%
arrange(idx) %>%
mtuate(val = val/val[1L])

关于r - 根据组的第一行对组中的每一行进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44775024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com