r - 有条件的递增
问题描述
我想添加一个新列,其中包含一个序列号,如果它与特定列的条件匹配,该序列号会增加
Table1 <- tibble::tribble(~x, ~y,
"a", 1,
"b", 2,
"c", 2,
"d", 0,
"e", 1,
"f", 0,
"g", 0
)
Expected
x y RowGroup
a 1 1
b 2 2
c 2 3
d 0 3
e 1 4
f 0 4
g 0 4
我已经使用以下代码获得了解决方案,但解决方案分两步完成
Table1 <- Table1 %>%
mutate(RowGroup = if_else(!y == "0", cumsum(!y == "0"), NA_integer_)) %>%
fill(RowGroup, .direction = "down")
是否有来自tidyverse
或其他包的单个步骤或特定功能编号来实现这一目标?
解决方案
我们可以cumsum
在 时使用并增加序列y != 0
。
library(dplyr)
Table1 %>% mutate(RowGroup = cumsum(y != 0))
# x y RowGroup
# <chr> <dbl> <int>
#1 a 1 1
#2 b 2 2
#3 c 2 3
#4 d 0 3
#5 e 1 4
#6 f 0 4
#7 g 0 4
显然,您也可以直接实现这一点而无需任何包。
Table1$RowGroup <- cumsum(Table1$y != 0)
推荐阅读
- ionic-framework - (iOS) Navigator.mediaDevices not present in your browser error with ionic and aframe
- angular - Mat-tab 在选定选项卡后加载内部组件
- javascript - jQuery点击进入选择引导搜索不起作用
- bash - bash tty 输入耗尽(或刷新?)
- reactjs - 打字稿错误:“EventTarget”类型上不存在属性“删除”
- c# - 向下滚动并更新 Listview C#
- php - 在 PHP 中创建一个具有随机值的 cookie --> 在 MySQL 查询中使用该随机值
- c# - WPF 数据绑定仅在更改时更新
- android - AndroidX 库在我的应用程序中与 CheckBoxes 混淆了
- linux - 如何更新终端上特定行的文本?