相关疑难解决方法(0)

如何在R中的dplyr链中添加进度条

我喜欢dplyr的"progress_estimated"功能,但我无法弄清楚如何在dplyr链中使用进度条.我在这里放置了一个代码可重复的示例.

我有一个非常大的data.frame像这样:

                cdatetime latitude longitude   
1 2013-01-11 06:40:00 CST 49.74697 -93.30951
2 2013-01-12 15:55:00 CST 49.74697 -93.30951 
3 2013-01-07 20:30:00 CST 49.74697 -93.30951 
Run Code Online (Sandbox Code Playgroud)

我想用图书馆计算每个日期的日出时间

library(dplyr)
library(StreamMetabolism)
Run Code Online (Sandbox Code Playgroud)

我可以让dplyr的progress_estimated栏在循环中工作,例如:

丑陋的循环(工程)

p <- progress_estimated(nrow(test))

for (i in 1:nrow(test)){
  p$tick()$print()
  datetime = as.POSIXct(substr(test$cdatetime[i], 1, 20), tz = "CST6CDT")
  test$sunrise[i] <- sunrise.set(test$latitude[i], test$longitude[i], datetime, "CST6CDT", num.days = 1)[1,1]
}
Run Code Online (Sandbox Code Playgroud)

但是我怎么能把它嵌入我的函数中,所以我可以避免使用循环?

更喜欢使用:

SunriseSet <- function(dataframe, timezone){
  dataframe %>% 
    rowwise() %>% 
    mutate(# calculate the date-time using the correct timezone
      datetime = as.POSIXct(substr(cdatetime, 1, 20), tz = timezone), …
Run Code Online (Sandbox Code Playgroud)

r progress-bar dplyr

13
推荐指数
1
解决办法
3148
查看次数

使用tidyr :: complete with group_by

有谁知道是否tidyr::complete()支持分组通过group_by()

确切地说:我有一些看起来像这样的数据框

df <- data.frame(
  "ID"   = rep(1:2, each = 2),
  "Col1" = c("A", NA, "AA", NA),
  "Col2" = c("B", "C", "BB", "CC"))
Run Code Online (Sandbox Code Playgroud)

现在我想使用complete()group_by()计算每组的所有可能组合!

df %>% 
 group_by(ID) %>% 
 complete(Col1, Col2)

  Error in .Call("dplyr_left_join_impl", PACKAGE = "dplyr", x, y, by_x,  : 
  negative length vectors are not allowed
Run Code Online (Sandbox Code Playgroud)

这会导致错误.但是,使用complete()没有分组工作,但这不是我想要的.

df %>% 
 complete(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我做错了什么,或者根本complete()不合作group_by
  2. 如果是这样,我怎么能这样做(最好不使用循环)?

r dplyr tidyr

4
推荐指数
1
解决办法
1324
查看次数

标签 统计

dplyr ×2

r ×2

progress-bar ×1

tidyr ×1