【问题标题】:Counting number of rows if certain conditions are met如果满足某些条件,则计算行数
【发布时间】:2021-02-02 15:28:39
【问题描述】:

我确定有人对此问题有一个聪明的解决方案:

我有一个这样的数据框:

A <- c("name1", "name2", "name3", "name4", "name5", "name6")
B <- c(10, 8, 7, 3, -1, -2)
C <- c(8, 3, -1, -10, -2, -2)
df <- data.frame(A, B, C)
df

      A  B   C
1 name1 10   8
2 name2  8   3
3 name3  7  -1
4 name4  3 -10
5 name5 -1  -2
6 name6 -2  -2

如果满足某些条件,我想通过计算行数来获得四个值:

  • 我想计算这个数据帧中 B 和 C 都是负整数 (>0) 的行数——对于这个例子来说是“2”
  • 我想计算此数据帧中 B 和 C 均为正整数 (
  • 我想计算此数据帧中 B 为负整数 (>0) 且 C 为正数的行数 - 对于本示例,该行数为“0”
  • 我想计算此数据帧中的行数,其中 B 是正整数,C 是负数)——对于这个例子,它是“2”

我怀疑这可以通过某种 If/Else 语句以及“table(sign...”命令)来实现?

【问题讨论】:

    标签: r dataframe if-statement rowcount


    【解决方案1】:

    试试这个:

    library(dplyr)
    
    df_count <- df %>% summarise(con1 = sum(B < 0 & C < 0), 
                                 con2 = sum(B > 0 & C > 0),
                                 con3 = sum(B < 0 & C > 0),
                                 con4 = sum(B > 0 & C < 0))
    
    df_count
    con1 con2 con3 con4
       2    2    0    2
    

    【讨论】:

      【解决方案2】:

      在sign上创建一个带有interaction的列后,我们可以使用count

      library(dplyr)
      df %>%
         transmute(con = factor(interaction(sign(B), sign(C), sep=" "), 
           levels = c('1 1', '1 -1', '-1 1', '-1 -1'))) %>%
         count(con, .drop = FALSE)
      #    con n
      #1   1 1 2
      #2  1 -1 2
      #3  -1 1 0
      #4 -1 -1 2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多