英文:
Extract mismatch by groups
问题
我有一个如下的数据框:
| ID | col1| col2 |
|:---- |:------:| -----:|
| AB |1 | 3 |
| AB |1 | 3 |
| CD |2 | 4 |
| CD |2 | 3 |
我想比较每个ID内的行。
对于每个有差异的列,将不匹配的内容添加到相应的列中。
输出:
| ID | col1| col2 | 不匹配提取_col1| 不匹配提取_col2|
|:---- |:------:| :-----:| :-----:|-----:|
| AB |1 | 3 |Na |Na|
| AB |1 | 3 |Na| Na|
| CD |2 | 4 |Na| 4:3|
| CD |2 | 3 |Na| 4:3|
英文:
I have a data frame like this:
ID | col1 | col2 |
---|---|---|
AB | 1 | 3 |
AB | 1 | 3 |
CD | 2 | 4 |
CD | 2 | 3 |
I would like to compare row within each ID.
For each column with difference add in the mismatch referred to the column.
Output:
ID | col1 | col2 | mismatch_extract_col1 | mismatch_extract_col2 |
---|---|---|---|---|
AB | 1 | 3 | Na | Na |
AB | 1 | 3 | Na | Na |
CD | 2 | 4 | Na | 4:3 |
CD | 2 | 3 | Na | 4:3 |
答案1
得分: 2
您可以使用n_distinct() == 1
来确定是否在每个ID
组的每一列中存在不匹配。
library(dplyr)
df %>%
mutate(across(col1:col2, ~ if_else(n_distinct(.x) == 1, NA, toString(.x)),
.names = "mismatch_extract_{.col}"),
.by = ID)
# # A tibble: 4 × 5
# ID col1 col2 mismatch_extract_col1 mismatch_extract_col2
# <chr> <int> <int> <lgl> <chr>
# 1 AB 1 3 NA NA
# 2 AB 1 3 NA NA
# 3 CD 2 4 NA 4, 3
# 4 CD 2 3 NA 4, 3
注意:代码部分已排除在翻译之外,只提供翻译的文本。
英文:
You can use n_distinct() == 1
to know if there is a mismatch in each column by ID
groups.
library(dplyr)
df %>%
mutate(across(col1:col2, ~ if_else(n_distinct(.x) == 1, NA, toString(.x)),
.names = "mismatch_extract_{.col}"),
.by = ID)
# # A tibble: 4 × 5
# ID col1 col2 mismatch_extract_col1 mismatch_extract_col2
# <chr> <int> <int> <lgl> <chr>
# 1 AB 1 3 NA NA
# 2 AB 1 3 NA NA
# 3 CD 2 4 NA 4, 3
# 4 CD 2 3 NA 4, 3
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论