【发布时间】:2025-12-06 23:15:02
【问题描述】:
我有以下矩阵,每列中有不同的字符串。一列中不同字符串的最小数量是 2。有些列最多有 20 个不同的字符串,有些列只有两个不同的字符串。我想删除次要因素仅以非常低的频率(
我的示例矩阵是:
n.mat <- structure(c("M", "M", "M", "M", "M", "Y", "Y", "Y", "M", "Y",
"Y", "Y", "F", "F", "F", "F", "M", "M", "X", "Y", "Y", "F", "F",
"F", "A", "A", "A", "A", "A", "A", "A", "B", "A", "A", "A", "A",
"A", "A", "B", "C", "C", "C", "D", "D", "E", "E", "F", "G"), .Dim = c(8L,
6L), .Dimnames = list(c("r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8"), NULL))
想要的输出:
structure(c("M", "M", "M", "M", "M", "Y", "Y", "Y", "M", "Y",
"Y", "Y", "F", "F", "F", "F"), .Dim = c(8L, 2L), .Dimnames = list(
c("r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8"), NULL))
[,1] [,2]
r1 "M" "M"
r2 "M" "Y"
r3 "M" "Y"
r4 "M" "Y"
r5 "M" "F"
r6 "Y" "F"
r7 "Y" "F"
r8 "Y" "F"
所以我想删除第 3、4、5 和 6 列,因为所有不是主要因素的因素都出现在频率 1 或 2 中。
目前我有这个:
my_fun2 <- function(x) {
vec <- factor(x, levels = unique(x))
lapply(vec,
function(y) ifelse(y,
}
n.mat[] <- n.mat[, apply(n.mat, 2, my_fun2]
【问题讨论】:
-
是的,你的权利,对不起,我会编辑它。