Следующая функция выполняет то, о чем спрашивает вопрос.
Сначала она удаляет последний элемент x
и последний столбец DF
.
Затем Reduce
применяет функцию '=='
ксписок новых x
и каждой из строк нового DF
.
countEqual <- function(DF, X){
X <- X[-length(X)]
DF <- DF[-ncol(DF)]
eq <- apply(DF, 1, function(y){
all(Reduce('==', list(X, y)))
})
sum(eq)
}
x <- c("3rd", "Male", "Adult", "No")
countEqual(df, x)
#[1] 0
countEqual(df, c("3rd", "Male", "Child", "No"))
#[1] 6
Код создания тестовых данных.
Этонабор данных в вопросе с еще 20 строками.
df <- read.table(text = "
Class Sex Age Survived
1 3rd Male Child No
3 3rd Male Child No
4 3rd Male Child No
5 3rd Male Child No
6 3rd Male Child No
7 3rd Male Child No
", header = TRUE, stringsAsFactors = FALSE)
set.seed(1234)
n <- 20
Class <- sample(c("1st", "2nd", "4th"), n, TRUE)
Sex <- sample(c("Male", "Female"), n, TRUE)
Age <- sample(c("Child", "Adult"), n, TRUE)
Survived <- sample(c("Yes", "No"), n, TRUE)
df2 <- data.frame(Class, Sex, Age, Survived)
df <- rbind(df, df2)
df <- df[with(df, order(Class, Sex, Age, Survived)), ]
row.names(df) <- NULL