我目前正在研究一个关注重复水权的大型数据集。每个权利持有人都被分配了一个RightID,但有些人被记录了两次,用于文书目的。但是,一些rightID不止一次列出,并且与我的最终目标相关。一个例子:当金属标签号分配给特定水权时,有两个条目。为了避免重复计算我需要删除观察的关键信息。
我现在写了这个,
#Updated Metal Tag Number
for(i in 1:nrow(duplicate.rights)) {
if( [i, "RightID"]==[i-1, "RightID"] & [i,"MetalTagNu"]=![i-1, "MetalTagNu"] ){
remove(i)
}
print[i]
}
原始数据框的设置类似:
RightID Source Use MetalTagNu
1-0000 Wolf Creek Irrigation N/A
1-0000 Wolf Creek Irrigation 12345
1-0001 Bear River Domestic N/A
1-0002 Beaver Stream Domestic 00001
1-0002 Beaver Stream Irrigation 00001
E.g。权利人1-0002是必须保留的,因为他正在使用他的水权用于两个不同的目的。但是,权利持有人1-0000是不必要的重复。
权利持有人1-0000我需要消除,但权利持有人1-0002对我的最终目标很有价值。我还应该注意,单个rightID最多可以有10个条目,但在这10个条目中只有1个是不必要的重复。此外,重复和原始条目在数据集中不会彼此相邻。
我是新手所以请原谅我之前的不良尝试。我知道我可以使用l apply
函数来提高速度和效率。任何指导都会非常感激。
答案 0 :(得分:0)
所以我建议如下:
1)你说你想要保留一些重复项(金属标签号被分配给特定的水权)。我不知道这意味着什么。但我认为它是这样的 - 如果金属标签号= 1,那么即使有重复,你也想保留它们。因此,我建议您在数据中使用这些行(我们称之为data
):
data_to_keep <- data[data$metal_tag_number == 1, ]
data_to_dedupe <- data[data$metal_tag_number != 1, ]
2)现在您已拥有两个数据帧,您可以毫不费力地重复数据删除data_to_dedupe
:
deduped_data = data_to_dedupe[!duplicated(data_to_dedupe$dedupe_key), ]
3)现在您可以将两个数据帧合并在一起:
final_data <- rbind(data_to_keep, deduped_data)
如果这是您想要的,请升级并建议答案是正确的。谢谢!
答案 1 :(得分:0)
创建一个新列,key,它是RightID和amp;的组合。使用
假设您的数据框名为df,
df $ key&lt; - paste(df $ RightID,df $ Use)
然后,使用以下命令删除重复项:
df1&lt; - df [!duplicated(df [,1],)]
df1没有重复项。