【问题标题】:nullify columns where all values are the same使所有值都相同的列无效
【发布时间】:2017-12-12 09:14:46
【问题描述】:

我在 R 中有一个大矩阵,由以下矩阵表示:

A     B    C
0.01  0.9  0.1
0.02  0.7  0.1
0.9   0.8  0.1
0.003 0.08 0.1

我想取消所有具有相同值的列,例如 C 列,使其变为:

A     B    C
0.01  0.9  NA
0.02  0.7  NA
0.9   0.8  NA
0.003 0.08 NA

怎么做?

【问题讨论】:

  • 你为什么要这样做

标签: r apply


【解决方案1】:
a <- matrix(c(0.01, 0.02, 0.09, 0.003, 0.9, 0.7, 0.8, 0.08, 0.1, 0.1, 0.1, 0.1), 4, 3)

无论a 是数字还是其他,下面都应该有效

a[, apply(a, 2, function(x) length(unique(x))== 1)] <- NA

如果a 的值是通过某种计算得出的,那么this 线程可能有用。

【讨论】:

    【解决方案2】:

    如果您的矩阵称为m1,则具有所有相同值的列的方差为零,因此我们可以这样做,即

    m1[,apply(m1, 2, var) == 0] <- NA
    

    【讨论】:

    • 应该更快检测到length(unique(x)) == 1L
    • length(unique(x)) == 1L 建议也将处理非数字矩阵,而 var 仅适用于数字
    【解决方案3】:

    试试这个向量化(比如m 是你的矩阵):

    m[,(colSums(m)/m[1,])==nrow(m)] <- NA
    

    【讨论】:

    • 但如果第一行等于任何列的列均值但其他行不同,则会出错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多