我有以下问题。我有一个数据帧/tibble,它有(许多)代表不同年份的值的列,例如,一个城市在不同时间点的居民数量。我想现在生成的列,给我的增长率(见附件图片)。它应该类似于在列上循环时使用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年。
发布于 2019-01-30 15:02:00
本例中最简单的方法可能是使您的数据整洁,然后通过对按City分组的数据框使用dplyr的lag()函数来应用您正在使用的计算增长率的公式
## 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()将其重塑为原始格式。但是,通常不建议这样做。
https://stackoverflow.com/questions/54434666
复制相似问题