防止R中的重复

时间:2017-08-02 18:33:36

标签: r data.table

我在数据表中有一个列,其中包含非递减顺序的条目。但是可能有重复的条目。

labels <- c(123,123,124,125,126,126,128)
time <- data.table(labels,unique_labels="")
time
  labels unique_labels
1:    123              
2:    123              
3:    124              
4:    125              
5:    126              
6:    126              
7:    128  

我想让所有条目都是唯一的,所以输出将是

time
      labels unique_labels
1:    123     123           
2:    123     124         
3:    124     125         
4:    125     126         
5:    126     127         
6:    126     128         
7:    128     130

以下是此循环实现:

prev_label <- 0
unique_counter <- 0
for (i in 1:length(time$label)){
    if (time$label[i]!=prev_label)
        prev_label <- time$label[i]
    else
        unique_counter <- unique_counter + 1
    time$unique_label[i] <- time$label[i] + unique_counter
} 

2 个答案:

答案 0 :(得分:2)

这是一个矢量化解决方案,可以完全阻止您使用for循环。 由于timeR函数,我已将data.frame的名称更改为tm

cumsum(duplicated(tm$labels)) + tm$labels
[1] 123 124 125 126 127 128 130

tm$unique_labels <- cumsum(duplicated(tm$labels)) + tm$labels
tm
   labels unique_labels
1:    123           123
2:    123           124
3:    124           125
4:    125           126
5:    126           127
6:    126           128
7:    128           130

答案 1 :(得分:1)

tank = ("t", 1:NROW(labels), sep="")
time$unique_labels = ifelse(duplicated(time), tank, time$labels)

duplicated包的data.table函数返回数据集重复行的索引,只需将其替换为&#34; random&#34;您确定的值未在您的集合中使用