首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据框tibble / assignment上应用group_by/do时出错

在数据框tibble / assignment上应用group_by/do时出错
EN

Stack Overflow用户
提问于 2020-08-07 16:35:49
回答 1查看 38关注 0票数 1

我使用dplyr使用以下过程对分组的数据帧应用函数:

代码语言:javascript
运行
复制
Input2 <- data.frame(ens=rep(as.character(1:51), each=114),
                    dates_UTC= rep(as.character(seq(as.POSIXct("2013-01-01 07:00:00"), as.POSIXct("2013-01-06 00:00:00"), by="1 hour")), 51),
                    LE = sample(c(0,0,0,0,0,0,0,0,0.005,0.004,0.003,0.002,0.001), 114*51, replace=T),
                    ETPh = rep(0, 114*51),
                    ech = rep(1:114, 51),
                    NiveauResR = rep(c(32.1, rep(NA, 113)), each=51),
                    NiveauResS = rep(c(223, rep(NA, 113)), each=51),
                    HU1=rep(c(0.028, rep(NA, 113)), each=51),
                    HU2=rep(c(0, rep(NA, 113)), each=51),
                    HU3=rep(c(0, rep(NA, 113)), each=51),
                    HU4=rep(c(0, rep(NA, 113)), each=51),
                    HU5=rep(c(0, rep(NA, 113)), each=51),
                    HU6=rep(c(0, rep(NA, 113)), each=51))

Qmm_prev <- group_by(Input2, ens) %>%
  dplyr::do(data.frame(dates_prev =.$dates_UTC, Q = test2(.))) %>%
  unnest(cols=c())

With (从现实中简化)

代码语言:javascript
运行
复制
test2 <- function(x){
  Qmm_prev <- vector(length=nrow(x))
  for (ech in 1:nrow(x))
  {
   if (ech < 114){     
      x[ech, 8:ncol(x)] <- c(0,0,0,0,0,0)
    }
    Qmm_prev[ech] <- 10
  }
  return(Qmm_prev)
}

我有以下错误:

代码语言:javascript
运行
复制
Error: Assigned data `c(0, 0, 0, 0, 0, 0)` must be compatible with row subscript `ech`.
x 1 row must be assigned.
x Assigned data has 6 rows.
i Row updates require a list value. Do you need `list()` or `as.list()`?
Run `rlang::last_error()` to see where the error occurred. 

这段代码几个月前就可以工作了,如果我将group_ by /do代码替换为"ens“上的循环,它也可以工作。我认为group_by/do在语法上有问题,但我找不到……我知道这句话出自这句话:

代码语言:javascript
运行
复制
 x[ech, 8:ncol(x)] <- c(0,0,0,0,0,0)

但是当我使用循环测试它时,由于它是有效的,所以我找不到问题以及如何纠正它。

有谁有线索吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 17:07:48

按照错误消息所说的操作:

将行从以下位置更改:

代码语言:javascript
运行
复制
x[ech, 8:ncol(x)] <- c(0,0,0,0,0,0)

代码语言:javascript
运行
复制
x[ech, 8:ncol(x)] <- as.list(0,0,0,0,0,0)

并且代码按照预期工作:

代码语言:javascript
运行
复制
Qmm_prev <- group_by(Input2, ens) %>%
  dplyr::do(data.frame(dates_prev =.$dates_UTC, Q = test2(.)))

但是,请注意,do已经被取代,可能有一种更好的方法来编写test2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63298208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档