2015-07-21 76 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