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