【发布时间】:2016-11-01 16:02:52
【问题描述】:
我有一个包含 244 个数据框的列表,如下所示:
列表名称为datas。
datas[[1]]
year sal
2000 10000
2000 15000
2005 10000
2005 9000
2005 12000
2010 15000
2010 12000
2010 20000
2013 25000
2013 15000
2015 20000
我想创建一个名为fix.sal 的新列,将不同年份的不同值相乘。例如,我在与 2000 位于同一行的 sals 上乘以 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 12000 21600
2010 15000 22500
2010 12000 18000
2010 20000 30000
2013 25000 30000
2013 15000 18000
2015 20000 20000
我通过在 mutate 中使用 ifelse 成功地做到了这一点,这用于包 dplyr。
library(dplyr)
datas[[1]]<-mutate(datas[[1]], fix.sal=
ifelse(datas[[1]]$Year==2000,datas[[1]]$sal*2,
ifelse(datas[[1]]$Year==2005,datas[[1]]$sal*1.8,
ifelse(datas[[1]]$Year==2010,datas[[1]]$sal*1.5,
ifelse(datas[[1]]$Year==2013,datas[[1]]$sal*1.2,
datas[[1]]$sal*1)))))
但是我必须对列表datas中的244个数据框做这个操作。
所以我尝试使用这样的 for 循环来做到这一点;
for(i in 1:244){
datas[[i]]<-mutate(datas[[i]], fix.sal=
ifelse(datas[[i]]$Year==2000,datas[[i]]$sal*2,
ifelse(datas[[i]]$Year==2005,datas[[i]]$sal*1.8,
ifelse(datas[[i]]$Year==2010,datas[[i]]$sal*1.5,
ifelse(datas[[i]]$Year==2013,datas[[i]]$sal*1.2,
datas[[i]]$sal*1)))))
}
然后出现错误;
Error: invalid subscript type 'integer'
我该如何解决这个问题...?
任何 cmets 将不胜感激! :)
【问题讨论】:
标签: r if-statement for-loop dplyr