`dplyr::group_by` 中的因子是否有限制?

Is there a limit of factors in `dplyr::group_by`?

我正在苦苦思索如何使用变量的 lag 来计算组件的磨损。但是,我需要计算不同组的磨损,所以我使用 group_by 函数,但这是一个问题,当我使用需要分组的变量时,这会导致一列“NA” ,但是当我通过将具有较少因素的另一个变量分组进行测试时,计算有效。

我使用的数据框有 4093902 行和 52 行。我需要分组以执行磨损计算的变量具有 90183 个因子。另一个我测试过并且有效的有 11321 个因素。

这是我使用的代码:

final_date = result_data %>%
arrange((time)) %>%
  group_by(id_specific)%>%
  mutate(wear = dplyr::lag(some_value, n = 1, default = NA) - some_value)

有谁知道分组有没有因子限制?或者关于如何执行此计算的任何其他提示?

NA 可以是 lag 的结果,其中 returns 第一个值默认为 NA 或来自其他列值也可以是 NA。因此,当我们执行 -(或任何算术)时,如果 lhs 或 rhs 中有任何 NA,则它 returns NA。一种选择是使用可以使用 na.rm = TRUE

的函数 (rowSums)
library(dplyr)
final_date <- result_data %>%
arrange((time)) %>%
  group_by(id_specific)%>%
  mutate(some_value_new = dplyr::lag(some_value, n = 1,
             default = NA)) %>%
  ungroup %>%
  mutate(wear = rowSums(cbind(some_value_new, -1 * some_value), 
              na.rm = TRUE), some_value_new = NULL)

注意:最好在执行 rowSums 之前先 ungroup 以获得一些效率