2

我正在尝试编写一个代码,它逐行和迭代地评估我的数据框的 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 个新列,但我不知道该怎么做。有人吗?

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

4

1 回答 1

4

You can try this:

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

where names(mydata)[i] is the i'th name from mydata, e.g. names(mydata)[3] is Mar. To create a new column you have to put the variable in [[ ]]. The way you had it, it created a new column named Newcolname.

于 2015-03-12T16:31:57.713 回答