2015-07-21 88 views
1

我是一个新手R用户,并创建了一个小脚本,正在做一些三角学与移动数据。我需要添加一个最后一列,删除列之前的重复值。If else语句删除重复值

我试着添加一个if语句,它似乎在隔离时工作,但在放入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]) 
} 
+0

我不完全确定你的意思,“我需要添加一个最后一列,删除列之前的重复值。”一列如何删除另一列?可以使用“重复”功能检测重复项。 –

回答

0

我想你想用这个功能diffdiff(idata$width)将给出idata $ width的连续值之间的差异。然后

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

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

+0

这工作!非常感谢!! – ssx6