首页 > 解决方案 > 在R中如何计算一个值出现的次数并满足多个条件

问题描述

例子:

Colour   vehicle      city         type
red       car         London       Petrol
blue      truck       Paris        Diesel
red       car         NewYork      Electric
green     van         Barcelona    Petrol
black     motorbike   LosAngeles   Petrol

即如何计算“汽车”出现的次数,它是“红色”和“汽油”

这就是我尝试过的

sum(full_data$vehicle == "car" & full_data$Colour == "red" & 
  full_data$type == "Petrol")

标签: r

解决方案


假设full_data在最后的注释中可重现地显示您的代码对我有用。

# 1
sum(full_data$vehicle == "car" & full_data$Colour == "red" & 
   full_data$type == "Petrol")
## [1] 1

如果问题是如何改进代码,请尝试with. 此外,如果数据中有 NA(问题中没有),我们可以通过使用which(...)围绕逻辑表达式然后使用length而不是来处理它sum

# 2
with(full_data, length(which(vehicle == "car" & Colour == "red" & type == "Petrol")))
## [1] 1

这些中的任何一个也可以工作:

# 3
nrow(subset(full_data, vehicle == "car" & Colour == "red" & type == "Petrol"))
## [1] 1

library(dplyr)
full_data %>% 
  filter(vehicle == "car" & Colour == "red" & type == "Petrol") %>%
  nrow
## [1] 1

# 4
library(sqldf)
sqldf('select count(*) as count from full_data 
  where vehicle == "car" and Colour == "red" and type == "Petrol"')
##   count
## 1     1

笔记

full_data <- structure(list(Colour = c("red", "blue", "red", "green", "black"
), vehicle = c("car", "truck", "car", "van", "motorbike"), city = c("London", 
"Paris", "NewYork", "Barcelona", "LosAngeles"), type = c("Petrol", 
"Diesel", "Electric", "Petrol", "Petrol")), class = "data.frame", row.names = c(NA, 
-5L))

推荐阅读