基于以前的变量计算R中的新变量
我有一个数据框架,里面有很多公司不同年份的信息,比如基于以前的变量计算R中的新变量,r,variables,merge,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
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
有什么建议吗?您可以使用
dplyr::lag
。假设您的数据帧名为df1
,且公司
,年
的顺序如示例所示:
library(dplyr)
df1 %>%
group_by(Company) %>%
mutate(Change = ifelse(Ratio - lag(Ratio) < 0, 1, 0))
在没有上一年的情况下,这会生成NA
,我认为这是正确的方法。您始终可以使用第二个变种将NA
更改为0
:
df1 %>%
group_by(Company) %>%
mutate(Change = ifelse(Ratio - lag(Ratio) < 0, 1, 0))
mutate(Change = ifelse(is.na(Change), 0, Change))
df1%>%
集团(公司)%>%
突变(变化=ifelse(比率-滞后(比率)<0,1,0))
变异(Change=ifelse(is.na(Change),0,Change))
我们也可以使用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
df1$Change
df1$Change <- with(df1, ave(Ratio, Company, FUN = function(x) c(FALSE, diff(x) < 0)))
df1$Change
#[1] 0 0 1 0 0