【问题标题】:Count number of rows matching >1 criteria计算匹配 >1 个条件的行数
【发布时间】:2022-01-24 02:38:00
【问题描述】:

我有一个包含两列的数据框,如下:

A<-c(4,4,4,3,2,4,1)
B<-c(4,4,2,31,3,1,1)
data<-data.frame(A,B)

我知道我可以使用 grep() 来搜索一行匹配一个条件的次数(例如 length(grep(4,A)) 会计数A 列有 4 个 4。

如何让 R 计算符合两个条件的行数——例如“有多少行在 A 列中有一个“4”并且在 B 列中有一个“2”。

C<-c("hat", "hat", "coat")
D<-c("shoe", "sock", "glove")
data2<-data.frame(C,D)

理想情况下,我想要一些也适用于字符串的东西。在这种情况下,例如,有多少行包含 C 中的“hat”和 D 中的“sock”?

(这本质上相当于 Excel 中的 COUNTIFS 函数。)

【问题讨论】:

  • 您的预期输出如何?你想要1,因为只有一行包含hatsock,还是想要2 用于列C1 用于列D
  • 更新:我能够使用“sum(data2$C=="hat"&D=="sock") 使其在玩具示例中工作,但由于某种原因,这并没有当我用我的真实数据做它时工作。str()告诉我这是一个'data.frame':34个变量。2个变量:$ trialType:因子w / 3个级别“learn”,“practice”,..:2 1 1 1 1 1 1 1 1 1 ... $ selected_task_type: Factor w/ 2 levels "control","procedural": 1 2 1 1 2 1 1 1 2 1 ...) 它会告诉我'错误:对象'chosen_task_type' not found' 当我尝试 sum(myData$trialType=='learn'&chosen_task_type=='control') ---可能是因为数据类型是“因素”??
  • @MartinGal 我正在寻找第一个实例。计算同时存在“hat”和“sock”的行数,返回值“1”。
  • 我认为你的代码应该是sum(myData$trialType=='learn' &amp; myData$chosen_task_type=='control') 才能工作。
  • @MartinGal 啊,你是对的!太感谢了! .....奇怪的是,它适用于“data2”示例,如“sum(data2$C=="hat"&D=="sock")”,但不适用于其他数据。

标签: r count grep sum


【解决方案1】:

你可以试试

library(dplyr)
data %>%
  filter(A == 4, B == 2) %>%
  nrow

[1] 1

data2 %>%
  filter(C == "hat", D == "sock") %>%
  nrow

[1] 1

在哪里

data %>%
  filter(A == 4, B == 2)

  A B
1 4 2

data2 %>%
  filter(C == "hat", D == "sock")

    C    D
1 hat sock

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多