![](/img/trans.png)
[英]select multiple rows from a dataframe with a value equal to highest value by group
[英]Check if all rows are equal by group ID and return boolean value
我有一個數據框,其中為每個唯一實例提供了唯一 ID,其中title.1
或title.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.