gpt4 book ai didi

r - 按组从出现开始向后填充值

转载 作者:行者123 更新时间:2023-12-04 11:50:53 25 4
gpt4 key购买 nike

问题:如何在某个值出现之前向后填充组中的所有行。我并没有尝试使用 zoo na.locf 来填充 NA 或缺失值。在下文中,我想在每个 ID 组出现 1.00 之前用 1.00 填充 A 中的所有先前行,最好使用 dplyr

输入:

data<- data.frame(ID=c(1,1,1,1,2,2,2,3,3,3,4,4,4,4,4), 
time=c(1,2,3,4,1,2,3,1,2,3,1,2,3,4,5),
A=c(0.10,0.25,1,0,0.25,1,0.25,0,1,0.10,1,0.10,0.10,0.10,0.05))
ID time A
1 1 0.10
1 2 0.25
1 3 1.00
1 4 0.00
2 1 0.25
2 2 1.00
2 3 0.25
3 1 0.00
3 2 1.00
3 3 0.10
4 1 1.00
4 2 0.10
4 3 0.10
4 4 0.10
4 5 0.05

期望的输出:

ID time    A
1 1 1.00
1 2 1.00
1 3 1.00
1 4 0.00
2 1 1.00
2 2 1.00
2 3 0.25
3 1 1.00
3 2 1.00
3 3 0.10
4 1 1.00
4 2 0.10
4 3 0.10
4 4 0.10
4 5 0.05

最佳答案

按ID分组后可以查看1的累加和,在小于1的地方(还没有出现),将A值换成1:

data %>% 
group_by(ID) %>%
mutate(A = replace(A, cumsum(A == 1) < 1, 1))
# Source: local data frame [15 x 3]
# Groups: ID [4]
#
# ID time A
# <dbl> <dbl> <dbl>
# 1 1 1 1.00
# 2 1 2 1.00
# 3 1 3 1.00
# 4 1 4 0.00
# 5 2 1 1.00
# 6 2 2 1.00
# 7 2 3 0.25
# 8 3 1 1.00
# 9 3 2 1.00
# 10 3 3 0.10
# 11 4 1 1.00
# 12 4 2 0.10
# 13 4 3 0.10
# 14 4 4 0.10
# 15 4 5 0.05

非常相似,你也可以使用cummax:

data %>% group_by(ID) %>% mutate(A = replace(A, !cummax(A == 1), 1))

这是一个基本的 R 方法:

transform(data, A = ave(A, ID, FUN = function(x) replace(x, !cummax(x == 1), 1)))

关于r - 按组从出现开始向后填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307787/

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