首页 > 解决方案 > 检查是否对于 var1 的每个唯一值,有一个观察结果,其值等于 R 中的组 (var4) 的 var2 或 var3

问题描述

我认为我有一个不复杂的问题,但我对 R 的了解非常基础,所以我找不到答案。我有 4 个变量。一个是我称之为的分组变量cluster。其他 3 个 ( ID, IDman, IDwoman) 是个人 ID。像这样的东西:

cluster <- c("a", "a", "a", "b", "b", "b", "c", "c", "c")

ID <- c(1, 7, 18, 3, 3, 9, 25, 10, 19)

IDman <- c(1, 2, 3, 3, 3, 4, 10, 10, 6)

IDwoman <- c(5, 7, 9, 11, 12, 14, 19,19,5)

households <- data.frame(cluster, ID, IDman, IDwoman)

数据框 ( household) 基本上显示ID了家庭 ( ) 中的个人 ( cluster)。有时,这些人是婚姻,并且此信息由 IDman 和 IDwoman 的某种组合给出:它发生在同一集群中的ID相等IDmanID相等时。IDwoman例如,对于第一个集群(集群=a,或前 3 行),存在婚姻。IDman=1 和 IDwoman=7 是婚姻,因为他们在同一个家庭(cluster=a)并且因为 ID 和 IDman 在第一行等于 1,但 ID 和 IDwoman 在第二行等于 7(所有这一切都发生在集群 a)。

所以,我需要找到每个clusterID-equals-IDman 和 ID-equals-IDwoman 的唯一组合的数量。例如,在第二个cluster中,我们没有(因为没有 IDwoman=9),而在第三个中,cluster我们又有一个,因为 IDman=10 和 IDwoman=19 都出现在 ID 中,并且重复观察 IDman= 10 和 IDwoman=19 不考虑在内。结果不需要是显示这些链接的数据集。只是每个集群的这些独特组合的数量。

我不知道如何解决这个问题。我正在尝试通过applysapply功能,但没有奏效。

任何想法都非常受欢迎。

谢谢!

标签: rgroupingapply

解决方案


考虑使用(按组进行内联聚合)分配婚姻列,其中用于返回任何值。avemax TRUE

households <- within(households, {    
    man <- ave(IDman %in% ID, cluster, FUN=max)
    woman <- ave(IDwoman %in% ID, cluster, FUN=max)
    marriage <- man == 1 & woman == 1

    rm(man, woman)    
})

households
#   cluster ID IDman IDwoman marriage
# 1       a  1     1       5     TRUE
# 2       a  7     2       7     TRUE
# 3       a 18     3       9     TRUE
# 4       b  3     3      11    FALSE
# 5       b  3     3      12    FALSE
# 6       b  9     4      14    FALSE
# 7       c 10    10      19     TRUE
# 8       c 19     6       5     TRUE
# 9       c 25    10      19     TRUE

对于独特的组合,按行和列相应地过滤数据框,然后运行unique

unique(households[households$marriage == TRUE,
                  c("cluster", "marriage")])

#   cluster marriage
# 1       a     TRUE
# 7       c     TRUE

推荐阅读