【问题标题】:First difference data frame一阶差分数据帧
【发布时间】:2018-01-11 16:02:14
【问题描述】:

我有以下数据框:

>dados

COUNTRY   Year   CO2 emissions Pop. Growth(%)
Argentina  1994      1.23         0.3
Argentina  1995      1.26         0.2
Argentina  1996      1.28         0.4
Argentina  1997      1.24         0.2
Brazil     1994      1.54         0.7
Brazil     1995      1.59         0.6
Brazil     1996      1.60         0.9
Brazil     1997      1.58         1.3

我想首先区分每个国家/地区的变量 CO2 emissionsPop. Growth(%)。我已经尝试过 dados[,2:4] <- diff(dados[,2:4]) 函数,但它返回了错误:

“r[i1] 中的错误 - r[-length(r):-(length(r) - lag + 1L)] : 非数字 二元运算符的参数"

【问题讨论】:

  • 你能分享你想要的输出吗?

标签: r


【解决方案1】:

这里是dplyr:

library(dplyr)

df %>%
  group_by(COUNTRY) %>%
  mutate_at(vars(CO2_emissions:Pop_Growth), funs(.-lag(.)))

编辑:从dplyr 0.8.0 开始,funs() 已被软性弃用。对于较新版本的dplyr

,请改用以下内容
df %>%
  group_by(COUNTRY) %>%
  mutate_at(vars(CO2_emissions:Pop_Growth), list(~ .x - lag(.x)))

输出:

# A tibble: 8 x 4
# Groups:   COUNTRY [2]
  COUNTRY    Year CO2_emissions Pop_Growth
  <fct>     <int>         <dbl>      <dbl>
1 Argentina  1994         NA        NA    
2 Argentina  1995          0.03     -0.100
3 Argentina  1996          0.02      0.2  
4 Argentina  1997         -0.04     -0.2  
5 Brazil     1994         NA        NA    
6 Brazil     1995          0.05     -0.100
7 Brazil     1996          0.01      0.3  
8 Brazil     1997         -0.02      0.4 

数据:

df = structure(list(COUNTRY = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L), .Label = c("Argentina", "Brazil"), class = "factor"), 
    Year = c(1994L, 1995L, 1996L, 1997L, 1994L, 1995L, 1996L, 
    1997L), CO2_emissions = c(1.23, 1.26, 1.28, 1.24, 1.54, 1.59, 
    1.6, 1.58), Pop_Growth = c(0.3, 0.2, 0.4, 0.2, 0.7, 0.6, 
    0.9, 1.3)), .Names = c("COUNTRY", "Year", "CO2_emissions", 
"Pop_Growth"), class = "data.frame", row.names = c(NA, -8L))

【讨论】:

  • 非常有用!谢谢。
  • 对于较新版本的dplyr,建议使用list(),上面将返回funs() is soft deprecated as of dplyr 0.8.0 please use list() instead
  • @Sav-econ 感谢您的评论。我为新语法添加了一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
相关资源
最近更新 更多