【问题标题】:How do I get count of number of items in selection?如何计算选择中的项目数?
【发布时间】:2019-07-12 17:04:25
【问题描述】:

我想以数组格式列出每个饮食组(有四个)中有多少时间> 21。

我已尝试在 RStudio 中解决此问题。

data(ChickWeight)
newdata <- subset(ChickWeight, Time >= 21, select=Diet)

为了找出 newdata 中有多少观察值,我使用了 nrow(newdata), 但我想找出有多少观察符合标准,只需将其作为此表达式的一部分:

newdata <- subset(ChickWeight, Time >= 21, select=Diet) 

这样当我显示newdata 时,该表还将在新列中包含符合条件的观察数。

愿望输出:

Diet   Number Observations
1      200 (I just created the numbers for this column as examples)
2       75
3      150
4      100 

有没有办法做到这一点?

【问题讨论】:

  • 并且 obs 计数将是 newdata 的不同列中的重复数字? newdata$obs_count &lt;- nrow(newdata)呢?
  • 我希望它以这种方式显示:Diet Number Observations 1 200(# 是什么)2 300(# 是什么)3 75(# 是什么)4 25(# 是什么) avid_user: When我跑了你的,我得到了 NULL。
  • 请在问题正文中发布您想要的输出
  • 所以基本上你想获得每个 Diet 组的 obs 计数?

标签: r subset frequency


【解决方案1】:

可以在base:

transform(table(Diet=subset(ChickWeight, Time >= 21, select=Diet)))

#>   Diet Freq
#> 1    1   16
#> 2    2   10
#> 3    3   10
#> 4    4    9

【讨论】:

  • MM,谢谢。有用。 “表”的目的是什么?为什么需要它?
  • @Metsfan 你可以通过运行?table()来阅读它。简而言之,table 给出了一个带有频率的交叉表。我只是稍后对其进行转换以更改输出方向(运行不带transform 的代码即可查看)。你应该在更多数据帧上运行table,你必须知道它在哪些方面做得更好。
  • 当我在没有转换的情况下运行它时,我得到了这个错误:“subset.data.frame 中的错误(ChickWeight, select = Diet, weight) : 'subset' must be logical"
  • @Metsfan 您是否将其分配给列或其他内容?对于测试,只需运行该行之前或之后没有任何其他内容:table(Diet=subset(ChickWeight, Time &gt;= 21, select=Diet))
  • 好的,现在成功了。我注意到它将行转换为列。有趣的。再次感谢。
【解决方案2】:

subset 调用之后考虑一个简单的aggregate

newdata <- subset(ChickWeight, Time >= 21, select=Diet)

aggregate(cbind(Obs=Diet) ~ Diet, newdata, FUN=length)

#   Diet Obs
# 1    1  16
# 2    2  10
# 3    3  10
# 4    4   9

【讨论】:

    【解决方案3】:

    我们可以使用来自dplyrsummarize 来做到这一点:

    library(dplyr)
    
    newdata %>%
      group_by(Diet) %>%
      summarize(Num_Obs = n())
    

    我们甚至可以将subset 组合成一个dplyr 工作流:

    ChickWeight %>%
      filter(Time >= 21) %>%
      group_by(Diet) %>%
      summarize(Num_Obs = n())
    

    输出:

    # A tibble: 4 x 2
      Diet  Num_Obs
      <fct>   <int>
    1 1          16
    2 2          10
    3 3          10
    4 4           9
    

    【讨论】:

      【解决方案4】:

      这是一种数据表方法

      library(data.table)
      df <- as.data.table(ChickWeight)
      
      df[Time >= 21, .(Number = .N), by = Diet]
      #    Diet Number
      # 1:    1     16
      # 2:    2     10
      # 3:    3     10
      # 4:    4      9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-18
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多