簡體   English   中英

檢查對於 var1 的每個唯一值,是否有一個觀察值在 R 中按組 (var4) 等於 var2 或 var3

[英]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 個( IDIDmanIDwoman )是個人的 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等於IDmanID等於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。 結果不需要是顯示這些鏈接的數據集。 只是每個集群的這些獨特組合的數量。

我不知道如何解決這個問題。 我正在通過applysapply函數嘗試一些事情,但沒有任何效果。

任何想法都非常受歡迎。

謝謝!

考慮使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM