【问题标题】:Structure of panel data frame in R - consisting of seperate data frames [duplicate]R中面板数据框的结构-由单独的数据框组成[重复]
【发布时间】:2021-08-25 10:39:33
【问题描述】:

我有这个相对较大的长面板数据格式的数据框。

但是。我需要把这个变小。基本上它是 10 个调查折叠的结构,这意味着相同的问题(变量)被重复,因此给了我 10 个变量来测量相同的事情,但只有一年。

结构是这样的:

y <- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                year = c(2012, 2013, 2014, 2012, 2013, 2014, 2012, 2013, 2014),
                pasta_2012 = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                burger_2012 = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                pizza_2012 = c(2, 2, 2, 1, 1, 1, 1, 1, 1),
                pasta_2013 = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                burger_2013 = c(3, 3, 3, 2, 2, 2, 1, 1, 1),
                pizza_2013 = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                pasta_2014 = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                burger_2014 = c(3, 3, 3, 2, 2, 2, 1, 1, 1),
                pizza_2014 = c(1, 1, 1, 2, 2, 2, 3, 3, 3))

> print(y)
  id year pasta_2012 burger_2012 pizza_2012 pasta_2013 burger_2013 pizza_2013 pasta_2014 burger_2014 pizza_2014
1  1 2012          1           1          2          1           3          1          1           3          1
2  1 2013          1           1          2          1           3          1          1           3          1
3  1 2014          1           1          2          1           3          1          1           3          1
4  2 2012          2           2          1          2           2          2          2           2          2
5  2 2013          2           2          1          2           2          2          2           2          2
6  2 2014          2           2          1          2           2          2          2           2          2
7  3 2012          3           3          1          3           1          3          3           1          3
8  3 2013          3           3          1          3           1          3          3           1          3
9  3 2014          3           3          1          3           1          3          3           1          3

我想要的是添加三个变量,然后删除其他变量,这样我只有一个用于披萨、意大利面和汉堡,并且每年对应于它们在给定年份的值。像这样的:

  id year pasta burger pizza
1  1 2012     1      1     2
2  1 2013     1      3     1
3  1 2014     1      3     1
4  2 2012     2      2     1
5  2 2013     2      2     2
6  2 2014     2      2     2
7  3 2012     3      3     1
8  3 2013     3      1     3
9  3 2014     3      1     3

有人知道如何解决这个问题吗? 我有超过 15 个变量*10 我需要在其中进行跟踪。

【问题讨论】:

    标签: r dataframe structure panel


    【解决方案1】:

    使用pivot_longer,我们可以获得长格式的数据,并且只保留数据中唯一的行。

    library(dplyr)
    library(tidyr)
    
    y %>%
      pivot_longer(cols = -c(id, year), 
                   names_to = c('.value', 'new_year'), 
                   names_sep = '_') %>%
      select(-year) %>%
      distinct()
    
    #     id new_year pasta burger pizza
    #  <dbl> <chr>    <dbl>  <dbl> <dbl>
    #1     1 2012         1      1     2
    #2     1 2013         1      3     1
    #3     1 2014         1      3     1
    #4     2 2012         2      2     1
    #5     2 2013         2      2     2
    #6     2 2014         2      2     2
    #7     3 2012         3      3     1
    #8     3 2013         3      1     3
    #9     3 2014         3      1     3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2023-04-03
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多