我正在尝试编写一个代码,该代码按行和迭代方式评估我的数据框的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个新列,但我无法弄清楚如何做到这一点。任何人?
如果我不清楚,请告诉我。提前谢谢!
答案 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
的新列。