我似乎无法记住如何在R中正确编码 -
如果我想根据多个条目删除csv文件中的重复项 - 存储在不同列中的名字和姓氏
然后我可以编码:file [(duplicated(file $ First.Name),] 但是只看第一个名字,我希望它能同时看到最后一个名字。
如果这是我的起始档案:
Steve Jones
Eric Brown
Sally Edwards
Steve Jones
Eric Davis
我希望输出为
Steve Jones
Eric Brown
Sally Edwards
Eric Davis
仅删除匹配的名字和姓氏的名称。
答案 0 :(得分:1)
如果只有一列,请使用sub
删除子字符串(即名字)后跟空格,根据该字符串获取逻辑向量(!duplicated(..
)以对数据集的行进行子集化
df1[!duplicated(sub("\\w+\\s+", "", df1$Col1)),,drop=FALSE]
# Col1
#1 Steve Jones
#2 Eric Brown
#3 Sally Edwards
#5 Eric Davis
如果它基于两列且数据集有两列,则直接在数据集上执行duplicated
以获取逻辑向量,否定它并对行进行子集化。
df1[!duplicated(df1), , drop=FALSE]
# first.name second.name
#1 Steve Jones
#2 Eric Brown
#3 Sally Edwards
#5 Eric Davis
答案 1 :(得分:1)
以下是提高性能的解决方案(使用data.table,假设名字和姓氏存储在不同的列中):
> df <- read.table(text = 'Steve Jones
+ Eric Brown
+ Sally Edwards
+ Steve Jones
+ Eric Davis')
> colnames(df) <- c("First.Name","Last.Name")
> df
First.Name Last.Name
1 Steve Jones
2 Eric Brown
3 Sally Edwards
4 Steve Jones
5 Eric Davis
以下是data.table
特定代码开始的位置
> dt <- setDT(df)
> unique(dt,by=c('First.Name','Last.Name'))
First.Name Last.Name
1: Steve Jones
2: Eric Brown
3: Sally Edwards
4: Eric Davis
答案 2 :(得分:1)
您可以使用
file[!duplicated(file[c("First.Name", "Last.Name")]), ]
答案 3 :(得分:0)
尝试:
!duplicated(paste(File$First.Name,File$Last.Name))