R语言中按0.8阈值返回对应族群列名的续问需求
Hey there! Let's adjust your code to meet the new requirement—only return an ethnicity if its proportion is over 0.8, otherwise fall back to "No Match". Here's how to do it step by step:
Solution Overview
The core logic we need to implement is:
- For each individual, find the maximum proportion across all ethnicity columns
- Check if this maximum value is ≥ 0.8
- If yes: return the corresponding ethnicity name
- If no: return "No Match"
Base R Approach (No Extra Packages Needed)
First, define the columns that hold ethnicity proportion data:
# List of columns with ethnicity percentage values ethnic_cols <- c("white", "black", "hispanic", "asian", "other")
Then, calculate the max percentage per row, map it to the corresponding ethnicity, and apply our condition:
# Get the highest percentage for each row max_pct <- apply(ethnicity[ethnic_cols], 1, max) # Find the ethnicity associated with that highest percentage (matches your original logic) top_ethnic <- ethnic[max.col(ethnicity[ethnic_cols], 'first')] # Update the ethnicity column with our new rule ethnicity$ethnicity <- ifelse(max_pct >= 0.8, top_ethnic, "No Match")
dplyr/Tidyverse Approach (More Readable)
If you prefer tidyverse syntax, this version makes the row-by-row logic more explicit:
library(dplyr) ethnicity <- ethnicity %>% rowwise() %>% mutate( # Calculate the maximum percentage across all ethnicity columns max_pct = max(c_across(all_of(ethnic_cols))), # Identify which ethnicity has that maximum percentage top_ethnic = ethnic[which.max(c_across(all_of(ethnic_cols)))], # Apply our condition to set the final ethnicity value ethnicity = ifelse(max_pct >= 0.8, top_ethnic, "No Match") ) %>% ungroup()
Verify with Your Sample Data
Let's check how this works with your provided dataset:
- Row
1998:hispanicis 0.8306 (≥0.8) → returns "hispanic" - Row
3431: Max percentage is 0.5963 (white) <0.8 → returns "No Match" - Row
9524:asianis 0.8649 (≥0.8) → returns "asian"
This aligns perfectly with the behavior you described!
内容的提问来源于stack exchange,提问作者user12801590
相关产品推荐
相关产品推荐

