R:迭代添加新列

时间:2015-03-12 16:00:44

标签: r iterator add col

我正在尝试编写一个代码,该代码按行和迭代方式评估我的数据框的3列,并生成一个新的列,其中包含评估中找到的最小值。这是我的数据:

  mydata
  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug
1 .25  .50  .50  .25  .75  .50  .25  .25
2 .75  .25  .75  .50  .25  .50  .50  .50
3 .50  .50  .50  .50  .25  .25  .75  .25
4 .25  .75  .75  .50  .75  .75  .75  .75

这就是我想要制作的东西:

  mydata
  Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  -Mar  ...  -Aug
1 .25  .50  .50  .25  .75  .50  .25  .25  .25   ...  .25
2 .75  .25  .75  .50  .25  .50  .50  .50  .25   ...  .50
3 .50  .50  .50  .50  .25  .25  .75  .25  .50   ...  .25
4 .25  .75  .75  .50  .75  .75  .75  .75  .25   ...  .75

-Mar显示(Jan:Mar)的最小值,-Apr显示(Feb:Apr)的最小值,依此类推。

我尝试了以下内容:

> for (i in 3:8)

{ 
  Newcolname <- as.name(paste("-",i,sep=""))
  mydata$Newcolname<- pmin(mydata[,i-2],mydata[,i-1],mydata[,i])
}

但是这只给出了我的1个新列,包含(jun:aug)的最小值,是mydata的最后3列。我想要的是如上所述的5个新列,但我无法弄清楚如何做到这一点。任何人?

如果我不清楚,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

for (i in 3:8) {
  Newcolname <- paste0("-", names(mydata)[i]) 
  mydata[[Newcolname]] <- pmin(mydata[,i-2],mydata[,i-1],mydata[,i])
}

其中names(mydata)[i]是来自mydata的第i个名称,例如names(mydata)[3]Mar。要创建新列,您必须将变量放在[[ ]]中。您拥有它的方式,它创建了一个名为Newcolname的新列。