【问题标题】:How to calculate number of specific values in a data frame in R? [duplicate]如何计算R中数据框中特定值的数量? [复制]
【发布时间】:2017-12-22 17:57:40
【问题描述】:

我有一个数据框 df:

a b c
1 5 5
2 3 5
3 3 5
3 3 3
3 3 2
4 2 2
1 2 2

例如,我想计算我连续有多少个 3,我该怎么做? 例如第 2 行 = 1,第 3 行 = 2 等。 请指教。

【问题讨论】:

  • 您对每个条目的计数感兴趣,还是只对 3 秒感兴趣?
  • rowSums(df == 3)

标签: r dataframe


【解决方案1】:

如果您想计算所有值,@ManuelBickel 的答案很好。如果你真的只是想知道有多少个 3,这可能更简单。

rowSums(data==3)
[1] 0 1 2 3

【讨论】:

    【解决方案2】:

    如果您希望以更有序的方式返回计数

    set.seed(1)
    m <- matrix(sample(c(1:3, 5), 15, replace=TRUE), 5, dimnames=list(LETTERS[1:5]))
    m
    #   [,1] [,2] [,3]
    # A    2    5    1
    # B    2    5    1
    # C    3    3    3
    # D    5    3    2
    # E    1    1    5
    
    u <- sort(unique(as.vector(m)))
    r <- sapply(setNames(u, u), function(x) rowSums(m == x))
    r
    #   1 2 3 5
    # A 1 1 0 1
    # B 1 1 0 1
    # C 0 0 3 0
    # D 0 1 1 1
    # E 2 0 0 1
    

    【讨论】:

      【解决方案3】:

      您可以为此使用applytable。输出是一个列表,为您提供每行唯一元素的计数。 (如果对此感兴趣,将 apply 的 MARGIN 设置为 2 将为您提供每列的输出。)

      更新:由于其他人同时提供了产生更多“有序”输出的解决方案,因此我已为此目的使用data.table::rbindlist 修改了我的方法。

      #I have skipped some of the last rows of your example
      data <- read.table(text = "
                         a b c
                         1 5 5
                         2 3 5
                         3 3 5
                         3 3 3
                         ", header = T, stringsAsFactors = F)
      
      apply(data, 1, table)
      # [[1]]
      # 1 5 
      # 1 2 
      # [[2]]
      # 2 3 5 
      # 1 1 1 
      # [[3]]
      # 3 5 
      # 2 1 
      # [[4]]
      # 3 
      # 3 
      
      #Update: output in more ordered fashion 
      library(data.table)
      rbindlist(apply(data, 1, function(x) as.data.table(t(as.matrix(table(x)))))
                ,fill = TRUE
                ,use.names = TRUE)
      #     1  5  2  3
      # 1:  1  2 NA NA
      # 2: NA  1  1  1
      # 3: NA  1 NA  2
      # 4: NA NA NA  3
      
      #if necessary NA values might be replaced, see, e.g.,
      ##https://stackoverflow.com/questions/7235657/fastest-way-to-replace-nas-in-a-large-data-table
      

      【讨论】:

      • melting 整张桌子并按组计数可能更快
      猜你喜欢
      • 2017-12-03
      • 2018-09-01
      • 2015-05-06
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多