gpt4 book ai didi

r - 一阶差分数据框

转载 作者:行者123 更新时间:2023-12-02 03:42:11 24 4
gpt4 key购买 nike

我有以下数据框:

>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])但它返回了错误:

"Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : non-numeric argument to binary operator"

最佳答案

这是 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))

关于r - 一阶差分数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48211235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com