在for循环中使用ifelse inside mutate时出错
我有一个244个数据帧的列表,如下所示: 列表的名称是datas 我想创建一个名为fix.sal的新列,将不同年份的不同值相乘。例如,我在与2000位于同一行的SAL上乘以2。同样,sal值乘以的数字2005年为1.8,2010年为1.5,2013年为1.2,2015年为1。所以结果应该是这样的:在for循环中使用ifelse inside mutate时出错,r,if-statement,for-loop,dplyr,R,If Statement,For Loop,Dplyr,我有一个244个数据帧的列表,如下所示: 列表的名称是datas 我想创建一个名为fix.sal的新列,将不同年份的不同值相乘。例如,我在与2000位于同一行的SAL上乘以2。同样,sal值乘以的数字2005年为1.8,2010年为1.5,2013年为1.2,2015年为1。所以结果应该是这样的: Year sal fix.sal 2000 10000 20000 2000 15000 30000 2005 10000 18000 2005 9000 16200 2005 1200
Year sal fix.sal
2000 10000 20000
2000 15000 30000
2005 10000 18000
2005 9000 16200
2005 12000 21600
2010 15000 22500
2010 12000 18000
2010 20000 30000
2013 25000 30000
2013 15000 18000
2015 20000 20000
multiplier <-
c("2005" = 1.2
, "2006" = 1.05
, "2007" = 0.9)
通过在包dplyr中使用ifelse-insidemutate,我成功地做到了这一点
然后出现了一个错误
Error: invalid subscript type 'integer'
我怎样才能解决这个问题
如有任何意见,将不胜感激!: 请不要强迫自己使用ifelse。相反,使用乘数创建一个向量,然后使用年份从向量中进行选择。向量将如下所示:
Year sal fix.sal
2000 10000 20000
2000 15000 30000
2005 10000 18000
2005 9000 16200
2005 12000 21600
2010 15000 22500
2010 12000 18000
2010 20000 30000
2013 25000 30000
2013 15000 18000
2015 20000 20000
multiplier <-
c("2005" = 1.2
, "2006" = 1.05
, "2007" = 0.9)
返回:
[[1]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
[[2]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
[[3]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
要获得更紧凑的代码,可以使用:
lapply(datas, mutate, fix.sal = sal*multiplier[as.character(Year)])
但这让我对发生的事情不太清楚。请不要强迫自己使用ifelse。相反,使用乘数创建一个向量,然后使用年份从向量中进行选择。向量将如下所示:
Year sal fix.sal
2000 10000 20000
2000 15000 30000
2005 10000 18000
2005 9000 16200
2005 12000 21600
2010 15000 22500
2010 12000 18000
2010 20000 30000
2013 25000 30000
2013 15000 18000
2015 20000 20000
multiplier <-
c("2005" = 1.2
, "2006" = 1.05
, "2007" = 0.9)
返回:
[[1]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
[[2]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
[[3]]
Year sal fix.sal
1 2005 10 12
2 2006 20 21
3 2007 30 27
要获得更紧凑的代码,可以使用:
lapply(datas, mutate, fix.sal = sal*multiplier[as.character(Year)])
但这让我对正在发生的事情不太清楚。这里有一个使用ifelse和lappy的简单解决方案:
# Creating the list
df <- data.frame(year=c(rep(2000,2),rep(2005,3),rep(2010,3),rep(2013,2),2015),
sal=c(10000,15000,10000,9000,12000,15000,12000,20000,25000,15000,20000))
datas <- list(df,df)
# Applying the function with ifelse
lapply(datas,function(x){
outp <- ifelse(df$year==2000,df$sal*2,
ifelse(df$year==2005,df$sal*1.8,
ifelse(df$year==2010,df$sal*1.5,
ifelse(df$year==2013,df$sal*1.2,df$sal*1))))
return(outp)
})
您将获得列表中每个df的结果。下面是一个使用ifelse和LAPPY的简单解决方案:
# Creating the list
df <- data.frame(year=c(rep(2000,2),rep(2005,3),rep(2010,3),rep(2013,2),2015),
sal=c(10000,15000,10000,9000,12000,15000,12000,20000,25000,15000,20000))
datas <- list(df,df)
# Applying the function with ifelse
lapply(datas,function(x){
outp <- ifelse(df$year==2000,df$sal*2,
ifelse(df$year==2005,df$sal*1.8,
ifelse(df$year==2010,df$sal*1.5,
ifelse(df$year==2013,df$sal*1.2,df$sal*1))))
return(outp)
})
您将获得列表中每个df的结果