根据列名在 R 数据框中创建列以制作时间序列

Create column in R dataframe based on name of the column to make a time series

我在 R 中有一个数据框,它有两列,如下所示。它有一列城市中的塔楼创建日期。数据表示在哪一天,一座城市安装了一座塔。例如4 月 1 日,在这几个城市安装了塔,所以这个数据一直持续到 2020 年。

df_example <- read_table2("c_date   city_name
4/1/2016    Mbombela
4/1/2016    Ethekwini
4/1/2016    Ekurhuleni
4/1/2016    Prince Albert
4/1/2016    Ethekwini
4/1/2016    of Johannesburg
5/1/2016    Prince Albert
5/1/2016    Ethekwini
5/1/2016    of Johannesburg")

现在,我想基于上面的数据框创建一个数据框,其中每个 City 都有一个唯一的列,它告诉了次数,这已经连续出现在timeseries,增加了2016年到2020年每个城市到时候有多少塔的计数,所以变成了每个城市的时间序列数据。

Desired_output

#>   c_date   Mbombela Ethekwini Ekurhuleni Prince    of
#>   <chr>       <dbl>     <dbl>      <dbl>  <dbl> <dbl>
#> 1 4/1/2016        1         2          1      1     1
#> 2 5/1/2016        1         3          1      2     2

你想要这个吗(我不确定,因为不够data/details)

library(tidyverse)

data %>%
  group_by(c_date, city_name) %>%
  summarise(val = n()) %>%
  pivot_wider(
  id_cols = c_date,
  names_from = city_name,
  values_from = val,
  values_fill = 0
)

使用软件包 tidyrdplyr。假设你的 data.frame 被命名为 df.

library(dplyr)
library(tidyr)
dates <- df %>% distinct(c_date)
df %>% group_by(city_name, c_date) %>%
  summarise(buildings=n()) %>%
  inner_join(dates, by=c('c_date')) %>%
  group_by(city_name) %>%
  arrange(c_date) %>%
  mutate(buildings=cumsum(buildings, na.rm=TRUE)) %>%
  pivot_wider(names_from=city_name, values_from=buildings, values_fill=0)

这是我对这个问题的看法

library(tidyverse)

df_example <- read_table2("c_date   city_name
4/1/2016    Mbombela
4/1/2016    Ethekwini
4/1/2016    Ekurhuleni
4/1/2016    Prince Albert
4/1/2016    Ethekwini
4/1/2016    of Johannesburg
5/1/2016    Prince Albert
5/1/2016    Ethekwini
5/1/2016    of Johannesburg")
#> Warning: 4 parsing failures.
#> row col  expected    actual         file
#>   4  -- 2 columns 3 columns literal data
#>   6  -- 2 columns 3 columns literal data
#>   7  -- 2 columns 3 columns literal data
#>   9  -- 2 columns 3 columns literal data


df_example %>% 
  mutate(value = 1) %>% 
  pivot_wider(names_from = city_name,values_fn = sum,values_fill = 0) %>% 
  mutate(across(.cols = -c_date,.fns = cumsum))
#> # A tibble: 2 x 6
#>   c_date   Mbombela Ethekwini Ekurhuleni Prince    of
#>   <chr>       <dbl>     <dbl>      <dbl>  <dbl> <dbl>
#> 1 4/1/2016        1         2          1      1     1
#> 2 5/1/2016        1         3          1      2     2

reprex package (v0.3.0)

于 2020-12-07 创建