R 如何找到符合条件的行数

R 如何找到符合条件的行数,r,if-statement,dataframe,conditional,R,If Statement,Dataframe,Conditional,如果我有一个类似的数据帧 A: x. y. z. a. b. c. 1 0 0 3 0 0 2 0 0 5 6 5 3 0 0 6 8 2 4 0 1 8 0 6 5 0 0 20 2 0 6 0

如果我有一个类似的数据帧

A:
x.     y.     z.     a.     b.     c. 
1      0      0      3      0      0
2      0      0      5      6      5
3      0      0      6      8      2
4      0      1      8      0      6
5      0      0      20     2      0
6      0      1      3      3      7
如何获得数据帧B,如: 3列,每列与数据框a的a、b和c列相关。。包含符合以下条件的行数:

a、b和c值介于5和10之间、5和<10之间以及z之间的次数。值为1,则该行被计数

B是这样的:

B:
a.      b.      c.
1       0       2
下面是一个使用tidyverse工具的解决方案。方法是使用filter将z==1的行减少到只有这些行,然后使用summary_at压缩其他行。我们首先应用该函数。>5 & . < 10生成一个逻辑向量,判断a,b,c是否在5到10之间,然后将其求和。当应用于逻辑向量时,sum将TRUE视为1,FALSE视为0,因此这相当于计算真值

或在R基中:

sapply(c("a.", "b.", "c."), function(x)
    nrow(df[(df[, x] >= 5 & df[, x] <= 10) & df[, "z."] == 1, ])
)
#a. b. c.
# 1  0  2
样本数据 下面是一个使用data.table的选项


谢谢你的帮助。我有一个问题,如果我想找到符合两列相同条件的行数,我能做什么?输出可能只是行数。在本例中,可能类似于为z=1查找列a和b在5-10之间的行数,即0。但是如果我们寻找z=1,即a列和c列在5-10之间的行数,那将是1。@Philipper我没有得到你的评论。请更新您的问题或作为新问题发布。谢谢您的帮助。我有一个问题,如果我想找到符合两列相同条件的行数,我能做什么?输出可能只是行数。在本例中,可能类似于为z=1查找列a和b在5-10之间的行数,即0。但如果我们寻找z=1,即a列和c列在5-10之间的行数,则为1。@Philipper在回答你的新问题时,我添加了一个简短的base R解决方案。请看一看。您可以通过勾选最能回答您问题的解决方案来结束问题。感谢您的帮助Calum。我有一个问题,如果我想找到符合两列相同条件的行数,我能做什么?输出可能只是行数。在本例中,可能类似于为z=1查找列a和b在5-10之间的行数,即0。但如果我们寻找z=1,即a列和c列在5-10之间的行数,则为1。
sapply(c("a.", "b.", "c."), function(x)
    nrow(df[(df[, x] >= 5 & df[, x] <= 10) & df[, "z."] == 1, ])
)
#a. b. c.
# 1  0  2
df <- read.table(text =
    "x.     y.     z.     a.     b.     c.
1      0      0      3      0      0
2      0      0      5      6      5
3      0      0      6      8      2
4      0      1      8      0      6
5      0      0      20     2      0
6      0      1      3      3      7", header = T)
library(data.table)
setDT(df)[z. == 1, lapply(.SD, function(x) sum(x > 5 & x < 10)) , .SDcols = a.:c.]
#   a. b. c.
#1:  1  0  2