微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果满足某些条件,则计算行数

如何解决如果满足某些条件,则计算行数

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

我有一个像这样的数据框:

A <- c("name1","name2","name3","name4","name5","name6")
B <- c(10,8,7,3,-1,-2)
C <- c(8,-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...”命令)来实现?

解决方法

试试这个:

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
,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。