如何删除所有重复的代码,只留下每个代码的第一个代码?

时间:2016-05-11 09:09:23

标签: r

这是我的数据。

code    long    lat
a   103.0059509 1.736281037
a   103.0055008 1.736822963
a   103.0049973 1.737220049
a   103.0044479 1.737781048
a   103.0041733 1.737781048
b   103.003891  1.738060951
b   103.0022202 1.738055944
b   103.0019455 1.738332033
b   103.0013885 1.738332033
b   103.0011139 1.738610029
c   103.0008316 1.738610029
c   103.0005569 1.738891006
c   103.000267  1.738891006
c   103         1.738610029

我希望我的代码只显示第一个代码。没有重复。 而长期拉特的价值仍然是它的地方

1 个答案:

答案 0 :(得分:2)

假设'代码'列为shouter.web/routes类,我们将character替换为"",然后使用NA将NA值替换为之前的非NA值。

na.locf

如果我们想从输出中获取原始数据,请使用library(zoo) df1$code[df1$code==""] <- NA df1$code <- na.locf(df1$code) 。转换&#39; data.frame&#39;到&#39; data.table&#39; (data.table),按&#39;代码&#39;分组,我们得到从2开始到行数(setDT(df1))的行的索引(.I)。如果我们没有指定列名称,默认情况下,它会指定&#39; V1&#39;输出行索引列。将该列(.N)设置为子集并将其用作&#39; i&#39;分配($V1)&#39;代码&#39;的值到:=

""

有关library(data.table) setDT(df1)[df1[, .I[2:.N] , code]$V1, code := ""][] # code long lat # 1: a 103.0060 1.736281 # 2: 103.0055 1.736823 # 3: 103.0050 1.737220 # 4: 103.0044 1.737781 # 5: 103.0042 1.737781 # 6: b 103.0039 1.738061 # 7: 103.0022 1.738056 # 8: 103.0019 1.738332 # 9: 103.0014 1.738332 #10: 103.0011 1.738610 #11: c 103.0008 1.738610 #12: 103.0006 1.738891 #13: 103.0003 1.738891 #14: 103.0000 1.738610 的更多信息,请参阅vignettes