这是我的数据。
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
我希望我的代码只显示第一个代码。没有重复。 而长期拉特的价值仍然是它的地方
答案 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