【问题标题】:How to find rows with most values filled in a matrix? [closed]如何找到填充矩阵中值最多的行? [关闭]
【发布时间】:2020-10-15 04:36:40
【问题描述】:

给定一个像这样的矩阵(mat1):

mat1 <- matrix(c(1, "", 2, 3, 4, "", 2, 4, "", 5, 2, 1, 4, "", 3, 2, "", 3, "", ""), nrow = 4, ncol = 5)

我将如何查找具有最多非空字符串值的前 3 行?比如在mat1中,第1行有3个值,第2行有2个值,第3行有4个值,第4行有4个值。

有没有办法可以在某种频率表中将其制成表格,或者至少返回顶部行的向量?

【问题讨论】:

  • 作为初学者,请尝试rowSums(mat1 != "")
  • 你需要输出作为行的索引吗?
  • 在我的数据集中,每一行都被命名,所以如果可能的话,最好输出给我前 X 行的名称。行索引也可以,但如果我还可以可视化实际发生的事情并评估数据是否有意义,那就太好了
  • addmargins(mat1 != "")?

标签: r matrix frequency-table


【解决方案1】:

你可以这样做:

# Your matrix
mat1 <- matrix(c(1, "", 2, 3, 4, "", 2, 4, "", 5, 2, 1, 4, "", 3, 2, "", 3, "", ""), nrow = 4, ncol = 5)

# Transforming to data frame
df_mat <- as.data.frame(mat1)

# Quantity of null values
for (i in 1:nrow(df_mat)) {
  df_mat$COUNT[i] <- sum(df_mat[i,] == "")  
}

# Ordering the data frame
df_mat <- arrange(df_mat,desc(COUNT))

【讨论】:

    【解决方案2】:

    如果我们创建一个函数,我们可以转换成'long'格式,subset去掉空白元素,得到行名的dim属性的频率

    f1 <- function(mat, n) {
       row.names(mat) <- seq_len(nrow(mat))
       head(sort(table(subset(as.data.frame.table(mat),
            Freq != "")$Var1), decreasing = TRUE), n)
     }
    
    f1(mat1, 3)
    #  3 4 1 
    #  4 4 3 
    

    显示的输出是一个命名向量,其名称表示行索引或行名称,值表示非空白的频率。用户指定的n 参数给出了最上面的n 非空白行

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2016-10-28
      相关资源
      最近更新 更多