我有一个数据框,其中包含不同年份的一些公司的信息,例如
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
有什么建议吗?
答案 0 :(得分:0)
您可以使用dplyr::lag
。假设您的数据框名为df1
且Company
,Year
按您的示例排序:
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