【发布时间】: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,因为只有一行包含hat和sock,还是想要2用于列C和1用于列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' & myData$chosen_task_type=='control')才能工作。 -
@MartinGal 啊,你是对的!太感谢了! .....奇怪的是,它适用于“data2”示例,如“sum(data2$C=="hat"&D=="sock")”,但不适用于其他数据。