gpt4 book ai didi

r - 如果满足条件,则更新下一行的值

转载 作者:行者123 更新时间:2023-12-02 09:09:34 24 4
gpt4 key购买 nike

我有一种情况,我希望选择下一行的值来更新列而不是满足条件的行。所以传统的 ifelse 对我不起作用。

例如,如果 C 列的值大于 80,那么我希望使用 A 列的值更新 D 列的值,但在下一行。虚拟数据集是

A   B  C   D

10 11 12 0
1 13 14 0
3 4 85 0
78 56 56 0
70 80 16 0
60 67 86 0
50 65 77 0

预期的数据集是

A   B  C   D

10 11 12 0
1 13 14 0
3 4 85 0
78 56 56 78
70 80 16 0
60 67 86 0
50 65 77 50

最佳答案

我们可以使用ifelse

library(tidyverse)
df1 %>%
mutate(D = lag(ifelse(C > 80, lead(A), D), default = first(D)))
# A B C D
#1 10 11 12 0
#2 1 13 14 0
#3 3 4 85 0
#4 78 56 56 78
#5 70 80 16 0
#6 60 67 86 0
#7 50 65 77 50

或与逻辑索引相乘

df1 %>% 
mutate(D = lag((C > 80) * lead(A, default = last(A)), default = first(D)))

也可以在base R中完成

df1$D <-  with(df1, c(D[1], head((C > 80) * c(A[-1], A[length(A)]), -1)))

数据

df1 <- structure(list(A = c(10L, 1L, 3L, 78L, 70L, 60L, 50L), B = c(11L, 
13L, 4L, 56L, 80L, 67L, 65L), C = c(12L, 14L, 85L, 56L, 16L,
86L, 77L), D = c(0L, 0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame",
row.names = c(NA, -7L))

关于r - 如果满足条件,则更新下一行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131118/

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