首页 > 解决方案 > 基于多行值消除案例

问题描述

我有一个包含以下信息的基础:

编辑: *每一行是一个住在房子里的人,具有唯一 P_ID 和 AGE 的多个人可以住在具有相同 H_ID 的同一所房子里,我正在根据条件寻找所有个人的所有房子那所房子里至少有一个60岁以上的人,我希望能更好地解释它*

show(base)

              H_ID           P_ID        AGE        CONACT
1      10010000001   1001000000102        35          33
2      10010000001   1001000000103        12          31
3      10010000001   1001000000104         5          NA
4      10010000001   1001000000101        37          10
5      10010000002   1001000000206         5          NA
6      10010000002   1001000000205        10          NA
7      10010000002   1001000000204        18          31
8      10010000002   1001000000207         3          NA
9      10010000002   1001000000203        24          35
10     10010000002   1001000000202        43          33
11     10010000002   1001000000201        47          10
12     10010000003   1001000000302        26          33
13     10010000003   1001000000301        29          10
14     10010000004   1001000000401        56          32
15     10010000004   1001000000403        22          31
16     10010000004   1001000000402        49          10
17     10010000005   1001000000503         1          NA
18     10010000005   1001000000501        24          10
19     10010000005   1001000000502        23          10
20     10010000006   1001000000601        44          10
21     10010000007   1001000000701        69          32

我想要一份包含所有房屋和居住在那里的所有个人的列表,条件是至少有一个 60 岁以上的人,这是数据的链接:https://drive.google.com/drive/folders/1Od8zlOE3U3DO0YRGnBadFz804OUDnuQZ? usp=分享

以下是我制作基础的方法:

hogares<-read.csv("/home/servicio/Escritorio/TR_VIVIENDA01.CSV")
personas<-read.csv("/home/servicio/Escritorio/TR_PERSONA01.CSV")
datos<-merge(hogares,personas)

base<-data.frame(datos$ID_VIV, datos$ID_PERSONA, datos$EDAD, datos$CONACT)
base

非常感谢任何帮助,谢谢!

标签: rdataframetibble

解决方案


这可以通过以下方式完成:

添加每个家庭的最大年龄变量

base$maxage <- ave(base$AGE, base$H_ID, FUN=max)

然后只保留最高年龄在 60 岁以上的家庭。

base <- subset(base, maxage >= 60)

或者您可以将两条线合二为一。使用链接数据中的列名:

> base <- subset(base, ave(base$datos.EDAD, base$datos.ID_VIV, FUN=max) >= 60)
> head(base)
   datos.ID_VIV datos.ID_PERSONA datos.EDAD datos.CONACT
21  10010000007    1001000000701         69           32
22  10010000008    1001000000803         83           33
23  10010000008    1001000000802         47           33
24  10010000008    1001000000801         47           10
36  10010000012    1001000001204          4           NA
37  10010000012    1001000001203          2           NA


推荐阅读