根据 r 中的行号替换值

标签 r dplyr

我有一个看起来像这样的数据框:

id <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)
x <- c(1, 1, 0, 0, 1, 1, 1, 1, 1)
df <- data.frame(id, x)

我只想为每个 id 保留 = 1 的第一个值,否则我希望它 = 0,如下所示:
     id     x
  <dbl> <dbl>
1     1     1
2     1     0
3     1     0
4     2     0
5     2     1
6     2     0
7     3     1
8     3     0
9     3     0

我试过这段代码,但没有运气:
df %>% 
  group_by(id) %>%
  mutate(x = if (any(x == 1)) replace(x,
                                      row_number() != 1, 0) else x)
```

最佳答案

使用 replace你可以做 :

library(dplyr)
df %>% group_by(id) %>% mutate(y = replace(x, -match(1L, x), 0L))
#OR
#mutate(y = replace(x, which.max(x), 0L))

#     id     x     y
#  <dbl> <dbl> <dbl>
#1     1     1     1
#2     1     1     0
#3     1     0     0
#4     2     0     0
#5     2     1     1
#6     2     1     0
#7     3     1     1
#8     3     1     0
#9     3     1     0

关于根据 r 中的行号替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61495092/

相关文章:

r - 将每一行除以其总和

r - 我可以在单个 dplyr 语句中切换分组变量吗?

r - tidy() 工作但 glance() 和 augment() 在回归模型中不起作用

R:检查列值是否减少/增加

r - 将列表逐元素附加到 R 中嵌套列表的元素

r - 在 r 中处理 if_else 中的 NA

r - 替代不区分 "numeric"和 "integer"的 class()

r - 名称未知的单独列

r - 将一个数据框与另一个包含增长率的数据框相乘,但将其复合

r - 无法在 dplyr 中使用多字变量,还是我遗漏了什么?