你能解释一下我在循环中的错误
数据集就像这样
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值的错误,但我无法使其工作,即使经过数小时试用。
答案 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。