gpt4 book ai didi

替换数据框中一组中的不同行数

转载 作者:行者123 更新时间:2023-12-01 13:13:37 25 4
gpt4 key购买 nike

我有以下数据框:

df <- data.frame(id = c(rep(1, 7), rep(2, 12), rep(3, 9)), val = runif(28), num_adjustments = c(rep(5, 7), rep(4, 12), rep(2, 9)), adj = c(rep(0.5,28)))

df$val_adj <- df$val

我的目标是替换 val_adj,使其仅在行号小于或等于 时等于 df$val+df$adj每个 id 的 num_adjustments

因此,对于 id == 1,我想在前 5 行执行此操作,对于 id == 2,我希望在第一行执行此操作4行等

到目前为止,我已经尝试过:

df$val_adj <- with(df, ave(val_adj, id, FUN = function(i) replace(i, seq_along(i) <= num_adjustments,val+adj)))

但是,这似乎将 num_adjustments 评估为该列的第一行是什么(在我的例子中是 5),然后重复 的前 5 个值>id == 1 到所有其他 id

对于此事,我将不胜感激。非常感谢!

最佳答案

当当前row_number()小于等于时,我们可以group_byid并添加val + adj num_adjustments 每组的值。

library(dplyr)

df %>%
group_by(id) %>%
mutate(val_adj = ifelse(row_number() <= num_adjustments, val + adj, val))

# id val num_adjustments adj val_adj
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 0.114 5 0.5 0.614
# 2 1 0.622 5 0.5 1.12
# 3 1 0.609 5 0.5 1.11
# 4 1 0.623 5 0.5 1.12
# 5 1 0.861 5 0.5 1.36
# 6 1 0.640 5 0.5 0.640
# 7 1 0.00950 5 0.5 0.00950
# 8 2 0.233 4 0.5 0.733
# 9 2 0.666 4 0.5 1.17
#10 2 0.514 4 0.5 1.01
# … with 18 more rows

数据

set.seed(1234)
df <- data.frame(id = c(rep(1, 7), rep(2, 12), rep(3, 9)), val = runif(28),
num_adjustments = c(rep(5, 7), rep(4, 12), rep(2, 9)), adj = c(rep(0.5,28)))
df$val_adj <- df$val

关于替换数据框中一组中的不同行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073988/

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