[英]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.