gpt4 book ai didi

r - 使用 R 应用 ifelse 而不应用 for 循环

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

我有这样的 2 列数据:

v1 = c(0, 29, 32, 29, 32, 28, -59, 30)
v2 = c(0, 0, 0, 0, 1, 1, 0, 1)

data = data.frame(v1, v2)

v1 v2
1 0 0
2 29 0
3 32 0
4 29 0
5 32 1
6 28 1
7 -59 0
8 30 1

我想按如下方式更改列 v2 的值:如果 v1 的值为负,则将 v2 的所有先前 1 更改为 0。我可以使用 R 应用 for 循环来完成此操作.有没有办法在不应用 for 循环的情况下做同样的事情(可能使用 dplyr 包)?

更新我的实际问题比我之前解释的情况更普遍。对于造成的困惑,我深表歉意。我的数据可以有多个负值,如给定示例所示: enter image description here

最佳答案

A dplyr解决方案 cumsum()确定v1 < 0的位置:

library(dplyr)

data %>%
mutate(v2 = ifelse(row_number() < which.max(cumsum(v1 < 0)), 0, v2))

v1 v2
1 0 0
2 29 0
3 32 0
4 29 0
5 32 0
6 28 0
7 -59 0
8 30 1

如果数据有多个负值:

data <- data.frame(v1 = c(0, 29, 32, 60, -30, 31, -31, 31),
v2 = c(0, 0, 0, 1, 0, 1, 0, 1))

我的代码给出(result 列):

   v1 v2 result
1 0 0 0
2 29 0 0
3 32 0 0
4 60 1 0
5 -30 0 0
6 31 1 0
7 -31 0 0
8 31 1 1

关于r - 使用 R 应用 ifelse 而不应用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72154953/

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