以编程方式在R cbind()中插入列表元素

时间:2016-05-23 06:49:17

标签: r cbind

我有一个由命令创建的日期列表2006,2007,2008,2009,2010,2011

  dates <-sort(seq(2006,2011,1))  

我在几个地方使用相同的日期列表,有没有办法访问它们,可能还有

 sprinf %s

而不是输入它们?以下是我使用此列表的两个示例。

BS_INC <-cbind(mean(BS_2006$INCSAL), mean(BS_2007$INCSAL), mean(BS_2008$INCSAL),
                    mean(BS_2009$INCSAL), mean(BS_2010$INCSAL), mean(BS_2011$INCSAL))

bsRusInc <- as.vector(cbind(mean(Russ_BS_2006$INCSAL), mean(Russ_BS_2007$INCSAL), mean(Russ_BS_2008$INCSAL),
                             mean(Russ_BS_2009$INCSAL), mean(Russ_BS_2010$INCSAL), mean(Russ_BS_2011$INCSAL)))

2 个答案:

答案 0 :(得分:1)

我不太确定你需要什么,但你可以通过定义一个函数来节省一些空间:

BS_INC <-cbind(mean(BS_2006$INCSAL), mean(BS_2007$INCSAL), mean(BS_2008$INCSAL),
                    mean(BS_2009$INCSAL), mean(BS_2010$INCSAL), mean(BS_2011$INCSAL))
# instead of this, you can...
getit <- function(x) mean(x$INCSAL)
sapply(list(BS_2006, BS_2007, BS_2008, BS_2009, BS_2010, BS_2011), getit)

# and further:
sapply(lapply(paste0("BS_", 2006:2011), get), getit)

虽然将数据存储在列表中而不是n + 1个单独的数据框中可能更好。

答案 1 :(得分:1)

您可以使用paste0,eval,parse和sapply:

dates <-sort(seq(2006,2011,1))
var_list <- paste0("BS_",dates,"$INCSAL")
BS_INC <- sapply(var_list, function(x) mean(eval(parse(text = x))))