如何移除满足特定百分比元素小于指定数值的矩阵行
Tweaking Your Filter Function to Meet the Percentage Threshold Requirement
Hey there! Let's adjust your existing function to filter out rows where more than X% of the numeric columns are below a specified value (like 75% below 10). Here's a clear, modified version with explanations:
Modified Function
First, let's update the function to include a percentage threshold parameter (pct) and calculate the proportion of values below your target number (n) per row:
filter_rows <- function(m, n, pct) { # Calculate the percentage of numeric columns below 'n' for each row below_threshold_pct <- apply(m[, -1], 1, function(row) mean(row < n)) # Keep rows where the percentage of values below 'n' is <= pct m[below_threshold_pct <= pct, ] }
Key Changes Explained
- We replaced the
all(...)check withmean(row < n): Since logical values (TRUE/FALSE) are treated as 1/0 in arithmetic operations, taking the mean gives us the proportion of values belownin that row. - Added the
pctparameter: This lets you specify the threshold (e.g.,0.75for 75%) to filter against. m[, -1]targets only the numeric columns (skipping the first character column) — works for both data frames and matrices.
Example Usage with Your Sample Data
Let's test this with your example matrix:
# Create your sample matrix/data frame sample_mat <- data.frame( V1 = c("E.5", "E.2", "E.6", "E.1", "E.3"), V2 = c(13, 7, 7, 30, 51), V3 = c(16, 3, 7, 18, 54), V4 = c(19, 3, 6, 28, 52), V5 = c(7, 5, 6, 16, 44), stringsAsFactors = FALSE ) # Filter out rows where >75% of numeric values are below 10 filtered_result <- filter_rows(sample_mat, n = 10, pct = 0.75) print(filtered_result)
Output
V1 V2 V3 V4 V5 1 E.5 13 16 19 7 4 E.1 30 18 28 16 5 E.3 51 54 52 44
As you can see:
- Rows
E.2andE.6are filtered out: 100% of their numeric values are below 10 (which exceeds the 75% threshold). - Rows
E.5,E.1, andE.3are kept: their proportion of values below 10 is 25%, 0%, and 0% respectively — all ≤75%.
内容的提问来源于stack exchange,提问作者Fate
相关产品推荐
相关产品推荐

