数据框中for和while循环的问题

时间:2014-09-16 08:42:58

标签: r loops for-loop while-loop

你能解释一下我在循环中的错误

数据集就像这样

    plot<-c("A", "B", "C")
    s<-c(0.3, 0.7, 0.6)
    pe<-c(0.7, 0.3, 0.4)

    a<-data.frame(plot, s, pe)

library(reshape)
a.long<-melt(a, id=c("plot")
a.long1<-a.long[order(a.long$plot, -a.long$value),]

现在我的两个循环无法正常工作

    a.long1$maxS<-0
while (i <= length(a.long1$plot)+1){
    if (a.long1$plot[i]==a.long1$plot[i+1]){
    a.long1$maxS[i]<-1
    } else {
      a.long1$maxS[i]<-0
    }
   i = i+ 1
  }

for (i in 1:length(a.long1$plot)){
  if (a.long1$plot[i] == a.long1$plot[i+1] ) {
    a.long1$maxS[i]=1
  } else { 
  a.long1$maxS[i]=0}
}

我理解我在数据末尾发出的这个声明a.long1$plot[i] == a.long1$plot[i+1] NA值的错误,但我无法使其工作,即使经过数小时试用。

1 个答案:

答案 0 :(得分:0)

你没有解释预期的输出,但我想你想要这个:

a.long1$maxS <- as.numeric(c(head(a.long1$plot, -1) == tail(a.long1$plot, -1), NA))
#  plot variable value maxS
#4    A       pe   0.7    1
#1    A        s   0.3    0
#2    B        s   0.7    1
#5    B       pe   0.3    0
#3    C        s   0.6    1
#6    C       pe   0.4   NA

请记住,矢量化通常比R中的循环更好。这里我通过从plot中删除最后一个元素并创建两个向量,然后比较它们。然后我需要添加一个NA值,因为plot的最后一个值没有后续值。 as.numeric强制TRUE / FALSE为0/1。