我有GPS颈圈豹子的UTM坐标值,如果有任何相同的点,我的分析就会变得混乱。我想做的是在小数点字符串的末尾添加1,以使每个值唯一。
我所拥有的:
> View(coords)
> coords
X Y
1 623190.9 4980021
2 618876.6 4980729
3 618522.7 4980896
4 618522.7 4980096
5 618522.7 4980096
6 622674.1 4976161
我想要类似的东西,或者使每个数字唯一的东西(不必为+1)
> coords
X Y
1 623190.9 4980021
2 618876.6 4980729
3 618522.7 4980896
4 618522.71 4980096.1
5 618522.72 4977148.2
6 622674.1 4976161
我研究了现有的问题,并将其用于模拟数据集,但不适用于重复值超过1个的值。
DF <- data.frame(A=c(5,5,6,6,7,7), B=c(1, 1, 2, 2, 2, 3))
>View(DF)
A B
1 5 1
2 5 1
3 6 2
4 6 2
5 7 2
6 7 3
DF <- do.call(rbind, lapply(split(DF, list(DF$A, DF$B)),
function(x) {
x$A <- x$A + seq(0, by=0.1, length.out=nrow(x))
x$B <- x$B + seq(0, by=0.1, length.out=nrow(x))
x
}))
>View(DF
A B
5.1.1 5.0 1.0
5.1.2 5.1 1.1
6.2.3 6.0 2.0
6.2.4 6.1 2.1
7.2 7.0 2.0
7.3 7.0 3.0
当B的数字大于2时,B列中的“ 2”不会继续加一个小数位。当数字大于4位(即XXXXX和XX)时,我也很难做到这一点。更好的方法,但是我希望在添加这些小数并在包含12列各种数据的原始数据框中更改它们时有所帮助。
答案 0 :(得分:1)
使用make.unique
DF[] <- lapply(DF, function(x) as.numeric(make.unique(as.character(x))))
DF
# A B
#1 5.0 1.0
#2 5.1 1.1
#3 6.0 2.0
#4 6.1 2.1
#5 7.0 2.2
#6 7.1 3.0