簡體   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