r - 使用R、dplyr和rowwise时如何定义一个变量来记录处理的行数?
问题描述
我有一个需要很长时间才能运行的功能。所以,我想知道我的数据框有多少行被处理了。通常,我们可以在 for 循环中定义一个变量来轻松处理这个问题。但我不知道如何在 dplyr 中做到这一点。
假设代码是:
library(tidyverse)
myFUN <-functin (x) {
x + 1
}
a <- tibble(id=c(1:3),x=c(3,5,1))
a1 <- a %>%
rowwise() %>%
mutate(y=myFUN(x))
我希望在代码的某个地方,我可以定义一个变量 i。每次处理一行时,该值将加 1,然后在控制台中打印其值,如:
1
2
3
解决方案
您能否将另一个变量传递给函数,该变量将是数据帧的行号并将其打印在函数中。就像是 :
myFUN <-function (x, y) {
message(y)
x + 1
}
然后使用
library(dplyr)
a %>% mutate(y = purrr::map2_dbl(x, row_number(), myFUN))
#1
#2
#3
# A tibble: 3 x 3
# id x y
# <int> <dbl> <dbl>
#1 1 3 4
#2 2 5 6
#3 3 1 2
map_dbl
如果你的函数是矢量化的,你可以放手去做
a %>% mutate(y= myFUN(x, seq_len(n())))
推荐阅读
- php - 如何更新 PDO 准备语句中许多可能的参数中的一些
- python-3.x - 我正在尝试使用下面的代码获取当前日期时间。似乎是语法错误
- javascript - 我想根据容器或包装高度缩小文本
- angular - 有没有办法覆盖角度核心库中的角度组件初始化步骤来为每个组件的初始化执行一些代码
- amazon-web-services - ec2 实例亚马逊中的网络摄像头和麦克风访问
- firebase - 如何为我的用例创建可扩展的 NoSQL 后端?
- latex - 在表格中组合多行和多列时如何删除垂直线?
- vue.js - 构建vue应用程序时是否可以在dist中包含env文件
- java - Harmonyos 中 view.postDelayed(Runnable action, long delayMillis) 的等价物是什么?
- python - 是否可以只删除一个(或几个)特定行的重复项?