![](/img/trans.png)
[英]R: By group, check if for each unique value of one var, there is at least one observation where the value of the var equals the value of another var
[英]Check if for each unique value of var1, there is one observation where its value equals either var2 or var3 by group (var4) in R
我認為我有一個不復雜的問題,但我對 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
)基本上顯示了家庭( cluster
)中的個人( ID
)。 有時,這些個體是一個婚姻,這個信息是由 IDman 和 IDwoman 的某種組合給出的:它發生在同一個集群中的ID
等於IDman
和ID
等於IDwoman
。 例如,對於第一個集群(集群=a,或前 3 行)有一個婚姻。 IDman=1 和 IDwoman=7 是婚姻,因為他們在同一個家庭(集群=a)並且因為 ID 和 IDman 在第一行中等於 1,但在第二行中 ID 和 IDwoman 也等於 7(所有這些都發生在集群 a)。
所以,我需要的是為每個 ID-equals-IDman 和 ID-equals-IDwoman cluster
找到唯一組合的數量。 例如,在第二個cluster
,我們沒有(因為沒有 IDwoman=9),而在第三個cluster
我們又有一個,因為 IDman=10 和 IDwoman=19 都出現在 ID 中,並且觀察的重復不考慮 IDman=10 和 IDwoman=19。 結果不需要是顯示這些鏈接的數據集。 只是每個集群的這些獨特組合的數量。
我不知道如何解決這個問題。 我正在通過apply
或sapply
函數嘗試一些事情,但沒有任何效果。
任何想法都非常受歡迎。
謝謝!
考慮使用ave
(按組內聯聚合)分配Margin列,其中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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.