An example data:
df <- data.frame(
sample1 = c(10, 12, 9, 8, 13, 2, 1),
sample2 = c(1, 1, 9, 8, 10, 20, 5),
sample3 = c(1, 11, 9, 18, 11, 2, 2),
row.names = c("gene_1", "gene_2", "gene_3", "gene_4", "gene_5", "gene_6", "gene_7")
)
Using apply function to create a logical variable that can be used to filter the initial dataset:
keep <- apply(df, 1, function(row) sum(row >= 10) >= 3)
keep
gene_1 gene_2 gene_3 gene_4 gene_5 gene_6 gene_7
FALSE FALSE FALSE FALSE TRUE FALSE FALSE
So you can filter the expression matrix to keep only genes with expression value =>10 in => 3 samples , using keep :
filtered_df <- df[keep, ]