r - 如果满足条件,则复制一系列值
问题描述
我试图在下面的示例数据框中添加一列(事务),其中的逻辑是对于索引列中的每个“新值”,值的复制将重新开始。索引中的值将在整个数据框(150,000+ 行)中随机标记为“新”。我希望第一行以 1 开头,并且在每个 1:3 序列之后,序列将在 3 之后从 1 重新开始,除非索引列中有“新”,其中序列自动从 1 重新开始. 我尝试过利用rep()
和ifelse
各种组合,但收效甚微。此外,Transaction 列当前为空,没有任何值。先感谢您!
指数 | 交易 |
---|---|
1 | |
2 | |
3 | |
1 | |
2 | |
3 | |
新的 | 1 |
2 | |
新的 | 1 |
2 | |
3 | |
1 | |
新的 | 1 |
2 |
解决方案
这是第一次尝试:
library(tidyverse)
# Creating the data frame:
df <- data.frame(index = rep("", 14))
df[c(7,9,13), 'index'] <- 'New'
# Defining a run index:
df$run <- cumsum(df$index == "New")
df %>%
group_by(run) %>%
mutate(Transaction = ifelse( (1:n())%%3==0, 3, 1:n()%%3 )) %>%
ungroup() %>% select(-run)
# A tibble: 14 x 2
index Transaction
<chr> <dbl>
1 "" 1
2 "" 2
3 "" 3
4 "" 1
5 "" 2
6 "" 3
7 "New" 1
8 "" 2
9 "New" 1
10 "" 2
11 "" 3
12 "" 1
13 "New" 1
14 "" 2
推荐阅读
- excel - 我的 vba 代码中的 Elseif 函数不起作用
- graphics - 安装 intel-linux-graphics-installer 依赖不满足:libpackagekit-glib2-16 (>= 0.8.10)
- javascript - 如何通过最新的firestore反转时间戳以订购文档
- javascript - ./node_modules/react-bootstrap/esm/Modal.js 找不到模块
- solana - 如何获取在与@solana/web3.js 的交易中转移的自定义令牌数量?
- google-cloud-platform - Big Query 中的表未分区
- azure-ad-b2c - 带有“继续”条件的 Azure B2C 自我断言屏幕
- php - Laravel-检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 ') < Now()' 附近使用正确的语法
- javascript - 如何在 Joi 中获得兄弟值?
- maven - POM 无效,传递依赖项(如果有)将不可用,启用调试日志以获取更多详细信息