使用R将数据集缩减为只有在两个独立列中具有匹配数据的行
我试图将海量数据集简化为仅与“FIRSTNAME”列和“SSN”列匹配的行。为了帮助澄清,我做了一个小的设置 非常小的样本使用R将数据集缩减为只有在两个独立列中具有匹配数据的行,r,bigdata,R,Bigdata,我试图将海量数据集简化为仅与“FIRSTNAME”列和“SSN”列匹配的行。为了帮助澄清,我做了一个小的设置 非常小的样本 CUSTNUM FIRSTNAME SSN 1234 Matt 111 4321 Mark 222 5678 Mike 333 9875 Matt 444 1092 Matt 111 我要它回来 CUSTNUM FIRSTNAME SSN 1234 Matt 111 1092
CUSTNUM FIRSTNAME SSN
1234 Matt 111
4321 Mark 222
5678 Mike 333
9875 Matt 444
1092 Matt 111
我要它回来
CUSTNUM FIRSTNAME SSN
1234 Matt 111
1092 Matt 111
因为它们在两列中都匹配
我的数据集中有超过200万行的客户数据,因此我需要一种识别可能重复记录的方法 在base r中有一个方便的函数:
# suppose you have a dataframe, df, and you want to know which rows
# have duplicate values in both the FIRSTNAME and SSN columns together:
df$dup <- duplicated(df[,c('name','SSN')],fromLast=FALSE)
df$dup <- ifelse(duplicated(df[,c('name','SSN')],fromLast=TRUE),yes=TRUE,no=df$dup)
# return dups
df.answer <- df[which(df$dup),]
#假设您有一个数据帧df,您想知道哪些行
#FIRSTNAME和SSN列中的值都是重复的:
df$dup在base r中有一个方便的函数:
# suppose you have a dataframe, df, and you want to know which rows
# have duplicate values in both the FIRSTNAME and SSN columns together:
df$dup <- duplicated(df[,c('name','SSN')],fromLast=FALSE)
df$dup <- ifelse(duplicated(df[,c('name','SSN')],fromLast=TRUE),yes=TRUE,no=df$dup)
# return dups
df.answer <- df[which(df$dup),]
#假设您有一个数据帧df,您想知道哪些行
#FIRSTNAME和SSN列中的值都是重复的:
df$dup或者,使用dplyr
:
library(tidyverse)
df %>%
group_by(FIRSTNAME, SSN) %>%
filter(n() > 1)
# A tibble: 2 x 3
# Groups: FIRSTNAME, SSN [1]
CUSTNUM FIRSTNAME SSN
<int> <fctr> <int>
1 1234 Matt 111
2 1092 Matt 111
库(tidyverse)
df%>%
分组人(名字,SSN)%>%
过滤器(n()>1)
#一个tibble:2x3
#组:名字,SSN[1]
CUSTNUM FIRSTNAME SSN
11234马特111
21092马特111
或者,使用dplyr
:
library(tidyverse)
df %>%
group_by(FIRSTNAME, SSN) %>%
filter(n() > 1)
# A tibble: 2 x 3
# Groups: FIRSTNAME, SSN [1]
CUSTNUM FIRSTNAME SSN
<int> <fctr> <int>
1 1234 Matt 111
2 1092 Matt 111
库(tidyverse)
df%>%
分组人(名字,SSN)%>%
过滤器(n()>1)
#一个tibble:2x3
#组:名字,SSN[1]
CUSTNUM FIRSTNAME SSN
11234马特111
21092马特111
Try withduplicated
即df[duplicated(df[2:3])duplicated(df[2:3],fromLast=TRUE),]
尝试duplicated
即df[duplicated(df[2:3])duplicated(df[2:3],fromLast=TRUE),]
我认为你的ifelse
可以简化为duplicated(df[,c('name','SSN'),fromLast=TRUE)| df$dup
。如果你想加快速度,只需将dup
作为一个向量,而不是将它添加到数据帧中。我认为你的ifelse
可以简化为复制(df[,c('name','SSN')],fromLast=TRUE)| df$dup
。如果你想加快速度,只需将dup作为一个向量,而不是将它添加到数据帧中。