使用R、dplyr和rowwise时如何定义一个变量来记录处理的行数?
How to define a variable to record the number of processed rows when using R, dplyr and 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())))
我有一个功能需要很长时间才能 运行。所以,我想知道处理了我的数据框的多少行。通常,我们可以在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())))