通过添加小数点R

时间:2018-10-26 15:49:18

标签: r duplicates coordinates

我有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列各种数据的原始数据框中更改它们时有所帮助。

1 个答案:

答案 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