Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于以前的变量计算R中的新变量_R_Variables_Merge - Fatal编程技术网

基于以前的变量计算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