【问题标题】:Conditional Sum in RR中的条件和
【发布时间】:2012-06-05 08:41:43
【问题描述】:

我有一个 200 行 x 6 列的数据框。我有兴趣计算 Col A 中的值小于特定数字的总次数。该号码可以是硬编码的。我不知道从哪里开始...

【问题讨论】:

    标签: r conditional sum


    【解决方案1】:

    对于稍微复杂一点的问题,使用“which”来告诉“sum”在哪里求和: 如果 DF 是数据框:

          Ozone Solar.R  Wind Temp Month Day
     1      41     190  7.4   67     5   1
     2      97     267  6.3   92     7   8   
     3      97     272  5.7   92     7   9
    

    示例:汇总 Solar.R(第 2 列)的值,其中 Column1 或 Ozone>30 AND Column 4 或 Temp>90

    sum(DF[which(DF[,1]>30 & DF[,4]>90),2])
    

    【讨论】:

      【解决方案2】:

      要计算有多少值低于某个数字,您可以使用?sum

      sum( df$columnA < NUMBER )
      

      【讨论】:

        【解决方案3】:

        仅根据您的情况使用 sum 即可。逻辑值转换为 0 表示 FALSE,1 表示 TRUE,因此对逻辑求和可以告诉您有多少值是 TRUE。

         dat <- as.data.frame(matrix(1:36,6,6))
         colnames(dat) <- paste0("Col", LETTERS[1:6])
         dat$ColA
        # [1] 1 2 3 4 5 6
         dat$ColA < 3
        # [1]  TRUE  TRUE FALSE FALSE FALSE FALSE
         sum(dat$ColA < 3)
        # [1] 2
        

        【讨论】:

          【解决方案4】:

          虽然sum( df$columnA &lt; NUMBER ) 的答案是正确的,但稍微扩展一下可能会更好。

          说如果您想对值求和而不是计数,您可以使用:

          sum(df[df$columnA &lt; Number,]$columnA)

          或者如果有NA 值使用:

          sum(df[df$columnA &lt; Number,]$columnA, na.rm=TRUE)
          sum(df[(df$columnA &lt; Number)&amp;(!is.na(df$columnA)),]$columnA)

          基本上发生的情况是您创建了一个基于您的条件的具有 TRUE/FALSE 的 columnA 布尔向量。然后,您将获取原始数据帧的一个子集,并在这种情况下使用它来对列 A 进行求和。

          这里有一个示例,您可以尝试一下:

          df = data.frame(colA=c(1, 2, 3, 4, NA), colB=c('a', NA, 'c', 'd', 'e'))
          
          # Count
          sum(df$colA) # NA
          sum(df$colA, na.rm=TRUE) # 10 This is actually sum of values since colA wasn't turned into vector of booleans
          sum(df$colA > 0, na.rm=TRUE) # 4
          sum(df$colA > 2, na.rm=TRUE) # 2
          sum((df$colA > 2) & (df$colB == 'd'), na.rm=TRUE) # 1
          
          # Sum of values
          sum(df$colA, na.rm=TRUE) # 10
          sum(df[df$colA > 0,]$colA, na.rm=TRUE) # 10
          sum(df[df$colA > 2,]$colA, na.rm=TRUE) # 7
          bn_vector = (df$colA > 2)&(df$colB=='d') # Boolean vector
          sub_df = df[bn_vector,] # Subset of the dataframe. Leaving the second argument in [] empty uses all the columns
          sub_df_colA = df[bn_vector, 'colA'] # Content of column 'colA' which is vector of numbers
          sum(sub_df$colA) # 4
          sum(sub_df_colA) # 4
          

          【讨论】:

            【解决方案5】:

            臭氧

            Solar.R

            温度

            tbl

            tbl

            臭氧 |太阳能.R |风 |温度 |月 |日 1 41 | 190 | 7.4 | 67 | 5 | 1 2 97 | 267 | 6.3 | 92 | 7 | 8 3 97 | 272 | 5.7 | 92 | 7 | 9

            sum(tbl$Temp) / sum(!is.na(tbl$Temp))

            [1] 84

            【讨论】:

            • 请不要发布纯代码答案;提供代码如何工作以及为什么重要的解释。此外,您应该format your code 以提高其可读性。
            • 很好的答案。代码是给其他程序员的信息
            猜你喜欢
            • 1970-01-01
            • 2016-11-19
            • 2013-05-20
            • 2018-04-10
            • 2021-11-25
            • 2021-03-24
            • 2021-05-30
            • 1970-01-01
            相关资源
            最近更新 更多