簡體   English   中英

檢查所有行是否按組 ID 相等並返回 boolean 值

[英]Check if all rows are equal by group ID and return boolean value

我有一個數據框,其中為每個唯一實例提供了唯一 ID,其中title.1title.2中有一個字符串。 每個 ID 都用一個或多個名稱進行編碼。 見下文:

標題.1 標題.2 名稱 ID
一種 A1 水果 1個
一種 A1 水果 1個
B1 水果 2個
水果、蔬菜 3個
C C1 蔬菜、家禽、谷物 4個
C C1 蔬菜、家禽 4個
C C1 蔬菜、家禽 4個
D1 家禽 5個
D1 蔬菜 5個

我需要確定哪些 ID 在各行中具有相同的名稱,哪些不具有相同的名稱。 為此,我想按 ID 進行分組並進行測試,以查看具有該 ID 的所有行中的所有name值是否都相同。 然后,我想要 append 一個新列,其值 boolean 指示哪些 ID 滿足此條件,哪些不滿足。 output 應如下所示:

標題.1 標題.2 名稱 ID 名字.equal
一種 A1 水果 1個 真的
一種 A1 水果 1個 真的
B1 水果 2個 真的
水果、蔬菜 3個 真的
C C1 蔬菜、家禽、谷物 4個 錯誤的
C C1 蔬菜、家禽 4個 錯誤的
C C1 蔬菜、家禽 4個 錯誤的
D1 家禽 5個 錯誤的
D1 蔬菜 5個 錯誤的

我們可以在名稱上使用n_distinct來獲取唯一計數並在按 ID 分組后使用計數創建邏輯

library(dplyr)
df1 %>%
   group_by(ID) %>%
   mutate(names.equal = n_distinct(name) == 1) %>%
   ungroup

-輸出

# A tibble: 9 × 5
  title.1 title.2 name                         ID names.equal
  <chr>   <chr>   <chr>                     <int> <lgl>      
1 A       A1      fruit                         1 TRUE       
2 A       A1      fruit                         1 TRUE       
3 <NA>    B1      fruit                         2 TRUE       
4 B       <NA>    fruit, vegetable              3 TRUE       
5 C       C1      vegetable, poultry, grain     4 FALSE      
6 C       C1      vegetable, poultry            4 FALSE      
7 C       C1      vegetable, poultry            4 FALSE      
8 <NA>    D1      poultry                       5 FALSE      
9 <NA>    D1      vegetable                     5 FALSE     

數據

df1 <- structure(list(title.1 = c("A", "A", NA, "B", "C", "C", "C", 
NA, NA), title.2 = c("A1", "A1", "B1", NA, "C1", "C1", "C1", 
"D1", "D1"), name = c("fruit", "fruit", "fruit", "fruit, vegetable", 
"vegetable, poultry, grain", "vegetable, poultry", "vegetable, poultry", 
"poultry", "vegetable"), ID = c(1L, 1L, 2L, 3L, 4L, 4L, 4L, 5L, 
5L)), class = "data.frame", row.names = c(NA, -9L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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