我是新手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])
}
答案 0 :(得分:0)
我认为你想要使用函数diff
。 diff(idata$width)
将给出idata $ width的连续值之间的差异。然后
idata$width[c(FALSE, diff(idata$width) == 0)] <- NA
我认为你想做什么。最初的FALSE
是因为没有与第一个元素对应的值(因为正如你正确指出的那样,第一个元素之前没有元素)。