我有以下问题。我有一个数据框/小工具,其中有(很多)列表示不同年份的值,例如一个城市在不同时间点的居民人数。我现在想生成可以给我增长速度的列(请参阅所附图片)。就像在循环遍历列时使用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年。
答案 0 :(得分:0)
在此示例中,最简单的方法可能是使数据整齐,然后通过将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()
将其重塑为原始格式。但是,一般不建议这样做。