【问题标题】:Get Count for each unique value in each Row in R获取 R 中每一行中每个唯一值的计数
【发布时间】:2020-08-14 14:49:50
【问题描述】:

给定以下数据框(从我无法控制内容的 csv 文件中读取)

          C1 C2 C3 C4 C5 C6 C7 C8 C9
        1  a  a  a  c  d  b  c  c  a
        2  a  a  b  b  c  b  b  a  b
        3  a  c  c  d  d  b  c  b  b
        4  c  a  d  c  d  d  c  d  d

我需要计算每一行中每个唯一值的计数。如果单个值出现 5 次或更多次,则应确定该行无效(可能通过添加额外的有效/无效列)。我不在乎哪个值出现 5 次或更多次,就像任何值一样。在上面,第 2 行和第 4 行将是无效的。不幸的是,我不知道 csv 文件中有多少行数据。

【问题讨论】:

    标签: r unique rows


    【解决方案1】:

    如果您只想知道该行是否包含四个以上的任何条目,您可以这样做:

    df$invalid <- apply(df, 1, function(x) max(table(x)) > 4)
    #>   C1 C2 C3 C4 C5 C6 C7 C8 C9 invalid
    #> 1  a  a  a  c  d  b  c  c  a   FALSE
    #> 2  a  a  b  b  c  b  b  a  b    TRUE
    #> 3  a  c  c  d  d  b  c  b  b   FALSE
    #> 4  c  a  d  c  d  d  c  d  d    TRUE
    

    如果你真的想要每一行的计数,你可以这样做:

    cbind(df, t(apply(df[-10], 1,function(x) table(factor(x, levels = letters[1:4])))))
    #>   C1 C2 C3 C4 C5 C6 C7 C8 C9 invalid a b c d
    #> 1  a  a  a  c  d  b  c  c  a   FALSE 4 1 3 1
    #> 2  a  a  b  b  c  b  b  a  b    TRUE 3 5 1 0
    #> 3  a  c  c  d  d  b  c  b  b   FALSE 1 3 3 2
    #> 4  c  a  d  c  d  d  c  d  d    TRUE 1 0 3 5
    

    【讨论】:

      【解决方案2】:

      如果我们将行索引也用作 hte 列之一,我们也可以应用一次table

      cbind(df, as.data.frame.matrix(table(c(row(df)), unlist(df))))
      #   C1 C2 C3 C4 C5 C6 C7 C8 C9 a b c d
      #1  a  a  a  c  d  b  c  c  a 4 1 3 1
      #2  a  a  b  b  c  b  b  a  b 3 5 1 0
      #3  a  c  c  d  d  b  c  b  b 1 3 3 2
      #4  c  a  d  c  d  d  c  d  d 1 0 3 5
      

      如果我们需要创建“无效”列

      t1 <- table(c(row(df)), unlist(df))
      cbind(df, as.data.frame.matrix(t1), invalid = as.logical(rowSums(t1 > 4)))
      #  C1 C2 C3 C4 C5 C6 C7 C8 C9 a b c d invalid
      #1  a  a  a  c  d  b  c  c  a 4 1 3 1   FALSE
      #2  a  a  b  b  c  b  b  a  b 3 5 1 0    TRUE
      #3  a  c  c  d  d  b  c  b  b 1 3 3 2   FALSE
      #4  c  a  d  c  d  d  c  d  d 1 0 3 5    TRUE
      

      数据

      df <- structure(list(C1 = c("a", "a", "a", "c"), C2 = c("a", "a", "c", 
      "a"), C3 = c("a", "b", "c", "d"), C4 = c("c", "b", "d", "c"), 
          C5 = c("d", "c", "d", "d"), C6 = c("b", "b", "b", "d"), C7 = c("c", 
          "b", "c", "c"), C8 = c("c", "a", "b", "d"), C9 = c("a", "b", 
          "b", "d")), class = "data.frame", row.names = c("1", "2", 
      "3", "4"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 2020-10-06
        • 1970-01-01
        相关资源
        最近更新 更多