繁体   English   中英

dplyr,purrr,动态生成/计算 R 中的新列

[英]dplyr, purrr, dynamically generate/calculate new columns in R

我有以下问题。 我有一个数据框/小标题,它有(很多)代表不同年份的值的列,例如不同时间点城市中的居民数量。 我想现在生成给我增长率的列(见附图)。 它应该类似于在遍历列时使用 mutate() 。 我认为这应该是一项常见的任务,但我找不到任何提示如何去做。

编辑:

一个最小的示例可能如下所示:

## Minimal example

library(tidyverse)

## Given data frame

df <- tibble(
        City = c("Melbourne", "Sydney", "Adelaide"),
        year_2000 = c(100, 100, 205),
        year_2001 = c(101, 100, 207),
        year_2002 = c(102, 100, 209)
        )

## Result

df <- df %>%
  mutate(
    gr_2000_2001 = year_2001/year_2000*100 - 100,
    gr_2001_2002 = year_2002/year_2001*100 - 100
  )

我想找到一种以智能方式自动化/执行 mutate 命令的方法,因为我必须这样做 150 年。

在此处输入图像描述

在此处输入图像描述

此示例中最简单的方法可能是整理数据,然后通过使用 dplyr 的lag()函数将用于计算增长率的任何公式应用于按City分组的数据框:

## Minimal example
library(tidyverse)
df <- data.frame(City = c("Melbourne", "Sydney"),
             year_2000 = c(100, 100),
             year_2001 = c(101,100),
             year_2002 = c(102, 102))

df %>%
  gather(year, value, 2:4) %>%
  group_by(City) %>%
  mutate(growth = value/dplyr::lag(value,n=1))

结果是这样的:

# A tibble: 6 x 4
# Groups:   City [2]
  City      year      value growth
  <fct>     <chr>     <dbl>  <dbl>
1 Melbourne year_2000   100  NA   
2 Sydney    year_2000   100  NA   
3 Melbourne year_2001   101   1.01
4 Sydney    year_2001   100   1   
5 Melbourne year_2002   102   1.01
6 Sydney    year_2002   102   1.02

如果您绝对需要屏幕截图中提供的格式的数据,则可以应用spread()将其重塑为原始格式。 但是,通常不建议这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM