r - 检查是否对于 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
相等IDman
和ID
相等时。IDwoman
例如,对于第一个集群(集群=a,或前 3 行),存在婚姻。IDman=1 和 IDwoman=7 是婚姻,因为他们在同一个家庭(cluster=a)并且因为 ID 和 IDman 在第一行等于 1,但 ID 和 IDwoman 在第二行等于 7(所有这一切都发生在集群 a)。
所以,我需要找到每个cluster
ID-equals-IDman 和 ID-equals-IDwoman 的唯一组合的数量。例如,在第二个cluster
中,我们没有(因为没有 IDwoman=9),而在第三个中,cluster
我们又有一个,因为 IDman=10 和 IDwoman=19 都出现在 ID 中,并且重复观察 IDman= 10 和 IDwoman=19 不考虑在内。结果不需要是显示这些链接的数据集。只是每个集群的这些独特组合的数量。
我不知道如何解决这个问题。我正在尝试通过apply
或sapply
功能,但没有奏效。
任何想法都非常受欢迎。
谢谢!
解决方案
考虑使用(按组进行内联聚合)分配婚姻列,其中用于返回任何值。ave
max
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
推荐阅读
- oracle - 输入对象数组作为输入,并返回一个数组作为存储过程的输出
- linux - 我们如何增加 kubernetes 工作节点中临时存储的大小
- java - Shiro、哈希、盐、数据库
- scala - Spark udf 错误任务不可序列化(scala)
- trace32 - Trace32:当调试器处于运行模式时,Var.watch 窗口不显示变量值更新
- rpa - 循环转到 csv 中的特定单元格
- postgresql - 不是 100% 确定这是否安全
- deep-learning - 深度学习中的“小批量”是什么意思?
- microsoft-graph-api - 图“ErrorApiQuarantined”
- jquery - 如何使用 jquery 实时收听 div 并在鼠标滚轮上添加或删除类?