r - 基于多个现有列顺序生成列

标签 r dplyr

我有一个如下所示的数据框:

 df <- data.frame(project = c("A", "B"),
                  no_dwellings = c(150, 180),
                  first_occupancy = c(2020, 2019))

  project no_dwellings first_occupancy
1       A          150            2020
2       B          180            2019
project是标识住宅建筑面积的列,no_dwellings表示这些地区最终 build 的住宅数量,以及 first_occupancy是对第一批居民何时开始搬入新建公寓的估计。

我需要将这些信息整合到人口预测中。我们得到的最佳估计是,每年(从 first occupancy 开始),有 60 套住宅正在搬入。因此,我需要依次生成组合来自 first_occupancy 的信息的列。和 no_dwellings指出每年可能搬入的住宅数量。由于 build 的住宅数量不一定要除以 60,所以余数需要放入相应项目的最后一列。

这是我希望我的数据框看起来像进一步处理的样子:
  project no_dwellings first_occupancy year_2019 year_2020 year_2021 year_2022
1       A          150            2020         0        60        60        30
2       B          180            2019        60        60        60         0

最佳答案

使用 data.table -package 您可以按如下方式处理此问题:

library(data.table)

setDT(df)[, .(yr = first_occupancy:(first_occupancy + no_dwellings %/% 60),
              dw = c(rep(60, no_dwellings %/% 60), no_dwellings %% 60))
          , by = .(project, no_dwellings, first_occupancy)
          ][, dcast(.SD, project + no_dwellings + first_occupancy ~ paste0('year_',yr), value.var = 'dw', fill = 0)]

这使:

   project no_dwellings first_occupancy year_2019 year_2020 year_2021 year_2022
1:       A          150            2020         0        60        60        30
2:       B          180            2019        60        60        60         0


相同的逻辑适用于 tidyverse :
library(dplyr)
library(tidyr)

df %>% 
  group_by(project) %>% 
  do(data.frame(no_dwellings = .$no_dwellings, first_occupancy = .$first_occupancy,
                yr = paste0('year_',.$first_occupancy:(.$first_occupancy + .$no_dwellings %/% 60)),
                dw = c(rep(60, .$no_dwellings %/% 60), .$no_dwellings %% 60))) %>% 
  spread(yr, dw, fill = 0)

关于r - 基于多个现有列顺序生成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49106338/

相关文章:

r - 从集群信息中查找网络链接

r - 带有 tmap 的交互式 map 不会出现在 Shiny 应用程序中,但会显示在 Rstudio 查看器中

r - R中的剪切函数替代

用于生成数字所有可能因式分解的 R 算法

r - 将三个不同的列合并到R中的日期中

r - 不断收到错误: Expecting a single value: [extent=2] in summarise

R:使用 dplyr 按组对前几年进行 t 检验

有条件地替换值,同时忽略 NA

r - dplyr::filter 组必须包含两个特定功能

r - R中的异步服务器或快速加载状态