基于先前变量计算R中的新变量

时间:2017-03-15 23:14:10

标签: r variables merge

我有一个数据框,其中包含不同年份的一些公司的信息,例如

Company  Year   Ratio
Apple    2002   .2
Apple    2003   .3
Apple    2004   .2
3M       2001   .1
3M       2002   .3

我需要做的是创建一个新的变量/列,如果给定公司的比率从前一年减少,则为1,否则为0。例如,

Company  Year   Ratio  Change
Apple    2002   .2        0
Apple    2003   .3        0
Apple    2004   .2        1
3M       2001   .1        0
3M       2002   .3        0

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用dplyr::lag。假设您的数据框名为df1CompanyYear按您的示例排序:

library(dplyr)
df1 %>%
  group_by(Company) %>%
  mutate(Change = ifelse(Ratio - lag(Ratio) < 0, 1, 0))

结果:

  Company  Year Ratio Change
1   Apple  2002   0.2     NA
2   Apple  2003   0.3      0
3   Apple  2004   0.2      1
4      3M  2001   0.1     NA
5      3M  2002   0.3      0

如果没有前一年,这会产生NA,我认为这是正确的做法。您可以随时使用第二个NA

0更改为mutate
df1 %>%
  group_by(Company) %>%
  mutate(Change = ifelse(Ratio - lag(Ratio) < 0, 1, 0))
  mutate(Change = ifelse(is.na(Change), 0, Change))

答案 1 :(得分:0)

我们也可以使用ave

中的base R执行此操作
df1$Change <- with(df1, ave(Ratio, Company, FUN = function(x) c(FALSE, diff(x) < 0)))
df1$Change 
#[1] 0 0 1 0 0
相关问题