从dplyr到base:为变量的每个级别创建第一个和最后一个索引的数据框

问如何从dplyrtobase可能是一个奇怪的问题,尤其是因为我喜欢tidyverse,但我认为因为我学习了tidyverse第一个,我对基础的掌握还很不熟练,我需要一个base解决方案,因为我正在帮助开发这个包不想要任何tidyverse依赖

数据(还有更多的列,但为了 reprex 的缘故而缩写):

sample.df <- tibble(batch = rep(c(1,2,3), c(4,5,6)))

期望基数相当于:

sample.df %>%
  mutate(rowid = row_number()) %>%
  group_by(batch) %>%
  summarize(idx_b = min(rowid),
            idx_e = max(rowid))

# A tibble: 3 x 3
# Groups:   batch [3]
  batch idx_b idx_e
  <dbl> <int> <int>
1     1     1     4
2     2     5     9
3     3    10    15

回答

我们在数据中创建一个序列列,用于aggregate获取rangemin/max并将矩阵列转换为常规 data.frame 列do.call

out <- do.call(data.frame, aggregate(rowid ~ batch,
   transform(sample.df, rowid = seq_len(nrow(sample.df))), 
      FUN = function(x) c(b = min(x), e = max(x))))


以上是从dplyr到base:为变量的每个级别创建第一个和最后一个索引的数据框的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>