删除R中的重复项

时间:2016-06-09 12:59:09

标签: r duplicates unique

我有一个大型数据集(> 37米个人),我正在使用R.我非常喜欢初学者。目前,我正在尝试(并尝试并尝试)计算我正在分析的国家/地区中每个省的平均家庭规模。我已设法创建一个单独的数据框,其中所需的变量为每个人提供一个单独的数字,因此在变量HH(对于HouseHolds)下给出一个家庭编号。现在我希望R从我创建的新数据框中删除此特定列的重复项,即HH列。

我尝试过多次使用duplicate()和unique()函数,但它不起作用。我还尝试在单独的工作表中隔离这个“HH”列,但这些功能仍然没有删除重复项。我也尝试将其转换为向量,然后执行duplicate()和unique()函数(如下所示)。

当我在excel中使用较小的样本时,它的效果非常好(要求excel删除重复项)。

这是我根据初始数据集(即PHCKCON)创建数据集的方式:

HHvars<-c("eano", "county", "tif")
HHKE<-PHCKCON[HHvars]
as.numeric(HHKE$county)
HHKE$county<-as.numeric(HHKE$county)

然后我为我的家庭创建了第4列:

HHKE$HH<-(paste(HHKE$eano, HHKE$county, HHKE$tif))

以下是我的数据集示例: The values in the first three columns are numeric whilst the last are classified as characters

以下是一小部分数据样本(我发明了这些但同样的想法):

Enumeration.area    County    Household.members
1                   a         4
1                   a         4 
1                   a         6
1                   a         6
1                   a         8
1                   a         8
1                   a         8
2                   a         4
2                   a         4
2                   a         6
1                   b         6
1                   b         6
1                   b         8 
1                   b         8
1                   b         12
1                   b         12
1                   b         12
1                   b         12

以下是我创建第四列HH所做的工作:

mydata$HH<-paste(mydata$Enumeration.area, mydata$County, mydata$Household.members)

然后给出第四列。

HH
1 a 4
1 a 4
1 a 6
1 a 6
1 a 8
1 a 8
1 a 8
1 a 8
2 a 4
2 a 4
2 a 6
2 a 8
1 b 6
1 b 6
1 b 8 
1 b 8
1 b 12
1 b 12
1 b 12
1 b 12  

然后我为我的HH列创建了一个单独的数据集(为了复制):

attach(mydata)
HHvars<-c("HH")
EX2<-mydata[HHvars]

然后我试图复制EX2,HH colum:

EX2[!duplicated(EX2$HH),] 

但它不起作用。而不是在使用

unique() 

功能。

我希望它更清楚!仍然感谢任何帮助。

干杯, 马德琳

1 个答案:

答案 0 :(得分:0)

如果您要求的只是每个enumeration.area的每个县的平均值和中位数,您可以使用Item { id: test x: 10 y: 10 function reset() { x = 10; y = 10; } } 相当快地完成此操作。我在下面列出了一些与你的数据相符的数据。

dplyr

结果是:

library(dplyr)
HH <- data.frame(
    Enumeration.area=c(1,1,1,2,2,2,3,3,3),
    County=c('a','a','b','a','a','a','b','a','b'),
    Household.members=c(4,6,5,8,10,9,3,4,3)
)
HH %>% group_by(Enumeration.area,County) %>% summarise(mean=mean(Household.members),median=median(Household.members))

然后,结果数据集的每一行都是Enumeration.area和County的唯一组合,对于这些组合中的每一个,您都会得到您的平均家庭数和中位数。

修改

由于您所需的输出是关于为每个观察创建连锁标识符,因此您可以这样做:

     Enumeration.area County  mean median
                (dbl) (fctr) (dbl)  (dbl)
1                1      a     5      5
2                1      b     5      5
3                2      a     9      9
4                3      a     4      4
5                3      b     3      3

这将创建一个字符串,它是Enumeration.area,County和Household.members的组合。然后使用df <- HH %>% group_by(Enumeration.area,County) %>% mutate(id=paste(Enumeration.area,County,Household.members)) 将删除所有重复项,如下所示:

distinct(id)

如您所见,重复行&#34; 3 b 3&#34;现在刚刚被简化为一个独特的观察。