楼主: 我隐身啦
27981 23

[问答] 关于R语言滞后的问题 [推广有奖]

11
蓝色 发表于 2015-12-11 20:22:59
  1. rm(list=ls())
  2. data <- read.table(header = TRUE, text = "
  3.                    Stkcd     Accper             size      
  4.                    4        2014/3/31         253126108.2  
  5.                    4        2014/6/30         275964182.4  
  6.                    4        2014/9/30         283038604.3  
  7.                    4        2014/12/31        338282581.1  
  8.                    5        2005/3/31         1800641798   
  9.                    5        2005/6/30         1773051158   
  10.                    5        2005/9/30         1781712610   
  11.                    5        2005/12/31        1643873315   
  12.                    5        2006/6/30         1559309892   
  13.                    5        2006/12/31        1528293792   
  14.                    ")

  15. library(lubridate)
  16. data <- within(data,{
  17.              year    <- year(Accper)
  18.              quarter <- quarter(Accper)
  19.              })

  20. library(dplyr)
  21. data <- group_by(data, Stkcd, year, quarter)
  22. data <- group_by(data, Stkcd, year)
  23. data <- mutate(data, V2 = lag(size, n=1L))
  24. data
复制代码

12
蓝色 发表于 2015-12-11 20:24:01
  1. > rm(list=ls())
  2. > data <- read.table(header = TRUE, text = "
  3. +                    Stkcd     Accper             size      
  4. +                    4        2014/3/31         253126108.2  
  5. +                    4        2014/6/30         275964182.4  
  6. +                    4        2014/9/30         283038604.3  
  7. +                    4        2014/12/31        338282581.1  
  8. +                    5        2005/3/31         1800641798   
  9. +                    5        2005/6/30         1773051158   
  10. +                    5        2005/9/30         1781712610   
  11. +                    5        2005/12/31        1643873315   
  12. +                    5        2006/6/30         1559309892   
  13. +                    5        2006/12/31        1528293792   
  14. +                    ")
  15. >
  16. > library(lubridate)
  17. > data <- within(data,{
  18. +              year    <- year(Accper)
  19. +              quarter <- quarter(Accper)
  20. +              })
  21. >
  22. > library(dplyr)
  23. > data <- group_by(data, Stkcd, year, quarter)
  24. > data <- group_by(data, Stkcd, year)
  25. > data <- mutate(data, V2 = lag(size, n=1L))
  26. > data
  27. Source: local data frame [10 x 6]
  28. Groups: Stkcd, year

  29.    Stkcd     Accper       size quarter year         V2
  30. 1      4  2014/3/31  253126108       1 2014         NA
  31. 2      4  2014/6/30  275964182       2 2014  253126108
  32. 3      4  2014/9/30  283038604       3 2014  275964182
  33. 4      4 2014/12/31  338282581       4 2014  283038604
  34. 5      5  2005/3/31 1800641798       1 2005         NA
  35. 6      5  2005/6/30 1773051158       2 2005 1800641798
  36. 7      5  2005/9/30 1781712610       3 2005 1773051158
  37. 8      5 2005/12/31 1643873315       4 2005 1781712610
  38. 9      5  2006/6/30 1559309892       2 2006         NA
  39. 10     5 2006/12/31 1528293792       4 2006 1559309892
复制代码

13
我隐身啦 发表于 2015-12-11 21:01:50
suimong 发表于 2015-12-11 16:18
我明白了,你是针对每个企业都有一组日期,范围在2005/3/31-2014/12/31,但是可能企业A缺了2014/06/30,企业 ...
谢谢。
library(plyr)
ddply(.data = A12,
      .variables = "Stkcd",
      .fun = function(A12){ inner_join(A12, dt, by = c("Accper" = "DATE"))})
按照你说的地方做了,我先生成了一个日期序列DATE,然后运行了上面的程序,但是显示了下面这样的错误,是不是哪里还出了问题?
Error in .fun(piece, ...) : could not find function "right_join"

14
我隐身啦 发表于 2015-12-12 14:24:03
蓝色 发表于 2015-12-11 20:24
Stkcd         Accper        size                    quarter        year        V2
2              2005/3/31        18099562461        1        2005        NA
2              2005/6/30        18878575570        2        2005        18099562461
2              2005/9/30        21198362007        3        2005        18878575570
2              2005/12/31        21992392061        4        2005        21198362007
2              2006/3/31        24272615067        1        2006        NA
2              2006/6/30        28727821155        2        2006        24272615067
2              2006/9/30        42245109714        3        2006        28727821155
2              2006/12/31        48507917571        4        2006        42245109714
2               2007/3/31        50178579911        1        2007        NA
2              2007/6/30        63670342454        2        2007        50178579911
2              2007/9/30        95027325210        3        2007        63670342454
2              2007/12/31        1.00E+11                4        2007        95027325210
2              2008/3/31        1.06E+11                1        2008        NA
2              2008/6/30        1.11E+11                2        2008        1.06E+11
2               2008/9/30        1.21E+11                3        2008        1.11E+11
2              2008/12/31        1.19E+11             4        2008        1.21E+11
你好,谢谢你的回复。但是按照你的运行,同一家公司每年的最后一个季度和下年的第一个季度并没有连一起,怎么回事?

15
suimong 发表于 2015-12-12 14:50:57 来自手机
没看明白你说的没有连在一起是什么意思~

16
蓝色 发表于 2015-12-12 14:57:05
我隐身啦 发表于 2015-12-12 14:24
Stkcd         Accper        size                    quarter        year        V2
2              2005/3/31        18099562461        1        2005        NA
2              2 ...
正在尝试
找不到一个函数能产生一个被软件认为是季度的变量yq最后两句改成下面就可以了。但是还没有找到
data <- group_by(data, Stkcd, yq)
data <- mutate(data, V2 = lag(size, n=1L))




如果是用stata,很容易处理。但R中找不到好办法
  1. clear
  2. input ///
  3. Stkcd    str16 Accper             size      
  4. 4        "2014/3/31"        253126108.2  
  5. 4        "2014/6/30"        275964182.4  
  6. 4        "2014/9/30"        283038604.3  
  7. 4        "2014/12/31"       338282581.1  
  8. 5        "2005/3/31"        1800641798   
  9. 5        "2005/6/30"        1773051158   
  10. 5        "2005/9/30"        1781712610   
  11. 5        "2005/12/31"       1643873315   
  12. 5        "2006/6/30"        1559309892   
  13. 5        "2006/12/31"       1528293792   
  14. end

  15. format size %16.1f

  16. gen double td=date(Accper,"YMD")  /*字符编程时间变量*/
  17. format td %td                     /*显示为时间变量*/

  18. gen double tq=qofd(td)           /*产生季度变量*/
  19. format tq %tq

  20. xtset  Stkcd  tq        /*设定为面板数据*/         
  21. gen lag_size=L.size

  22. format lag_size %16.1f
  23. list
复制代码

17
suimong 发表于 2015-12-12 15:08:19
我隐身啦 发表于 2015-12-11 21:01
谢谢。
library(plyr)
ddply(.data = A12,
inner_join和right_join是dplyr里的函数,需要先载入dplyr包。这里因为你需要日期序列里的所有值,所以要用right_join而不是inner_join

18
我隐身啦 发表于 2015-12-12 16:00:19
蓝色 发表于 2015-12-12 14:57
正在尝试
找不到一个函数能产生一个被软件认为是季度的变量yq最后两句改成下面就可以了。但是还没有找到 ...
谢谢,非常感谢。我用stata试试。

19
我隐身啦 发表于 2015-12-12 16:00:57
suimong 发表于 2015-12-12 15:08
inner_join和right_join是dplyr里的函数,需要先载入dplyr包。这里因为你需要日期序列里的所有值,所以要 ...
恩,好的。谢谢你这几天耐心的回答,学到了很多,谢谢。

20
梦回上古 在职认证  学生认证  发表于 2019-3-11 10:33:21
# First, create a pdata.frame
data("EmplUK", package = "plm")
Em <- pdata.frame(EmplUK)

# Then extract a series, which becomes additionally a pseries
z <- Em$output
class(z)

# compute the first and third lag, and the difference lagged twice
lag(z)
lag(z, 3)
diff(z, 2)

# compute negative lags (= leading values)
lag(z, -1)
lead(z, 1) # same as line above
identical(lead(z, 1), lag(z, -1)) # TRUE

# compute more than one lag and diff at once
# (each returns matrix)
lag(z, c(1,2))
diff(z, c(1,2))

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 14:32