if else语句删除重复值

时间:2015-07-21 14:35:27

标签: r if-statement for-loop

我是新手R用户并创建了一个小脚本,它正在对移动数据进行一些三角测量。我需要添加一个最后一列,从列中删除重复的值。

我已经尝试添加一个if else语句,它在隔离时似乎有效,但在将它放入for循环时仍然存在错误。我很感激任何建议。

# trig loop
list.df <- vector("list", max(Sp_test$ID)) 
names1 <- c(1:max(Sp_test$ID))
for(i in 1:max(Sp_test$ID)) {
  if(i %in% unique(Sp_test$ID)) {
    idata <- subset(Sp_test, ID == i)  
    idata$originx <- idata[1,3]
    idata$originy <- idata[1,4]
    idata$deltax <- idata[,"UTME"]-idata[,"originx"]
    idata$deltay <- idata[,"UTMN"]-idata[,"originy"]
    idata$length <- sqrt((idata[,"deltax"])^2+(idata[,"deltay"]^2))    
    idata$arad <- atan2(idata[,"deltay"],idata[,"deltax"])
    idata$xnorm <- idata[,"deltax"]/idata[,"length"]
    idata$ynorm <- idata[,"deltay"]/idata[,"length"]
      sumy <- sum(idata$ynorm, na.rm=TRUE)
      sumx <- sum(idata$xnorm, na.rm=TRUE)
    idata$vecsum <- atan2(sumy,sumx)
    idata$width <- idata$length*sin(idata$arad-idata$vecsum)         
    # need if else statement excluding a repeat from the position just before it
    list.df[[i]] <- idata
    names1[i] <- i
  } }


# this works alone, I think the problem is when it gets to the first of the dataset and there is not one before it
if (idata$width[j]==idata$width[j-1]) {
    print("NA")
} else {
    print(idata$width[j])
}

1 个答案:

答案 0 :(得分:0)

我认为你想要使用函数diffdiff(idata$width)将给出idata $ width的连续值之间的差异。然后

idata$width[c(FALSE, diff(idata$width) == 0)] <- NA

我认为你想做什么。最初的FALSE是因为没有与第一个元素对应的值(因为正如你正确指出的那样,第一个元素之前没有元素)。