у меня есть 25-летний набор данных, который выглядит примерно следующим образом:Как избежать для петель с несколькими критериями, в функции которых()
date name value tag
1 2014-12-01 f -0.338578654 12
2 2014-12-01 a 0.323379254 4
3 2014-12-01 f 0.004163806 9
4 2014-12-01 f 1.365219477 2
5 2014-12-01 l -1.225602543 7
6 2014-12-01 d -0.308544089 9
Это, как повторить его:
set.seed(9)
date <- rep(seq(as.Date("1990-01-01"), as.Date("2015-01-1"), by="months"), each=50)
N <- length(date)
name <- sample(letters, N, replace=T)
value <- rnorm(N)
tag <- sample(c(1:50), N, replace=T)
mydata <- data.frame(date, name, value, tag)
head(mydata)
Я хотел бы создать новую матрицу, которая хранит значения, которые удовлетворяют нескольким критериям. Например, сумма значений, которые имеют значение j и a тегi. Я использую два for-loops и функцию which() для фильтрации правильных значений. Например:
S <- matrix(data=NA, nrow=length(unique(mydata$tag)), ncol=length(unique(mydata$name)))
for(i in 1:nrow(S)){
for (j in 1:ncol(S)){
foo <- which(mydata$tag == unique(mydata$tag)[i] & mydata$name == unique(mydata$name)[j])
S[i,j] <- sum(mydata$value[foo])
}
}
Это нормально для небольших наборов данных, но слишком медленно для больших. Можно ли избежать циклов for-loops или ускорить процесс?
Спасибо! Так оно и было. – Per
удовольствие помочь! –