Не имея возможности точно определить, как вы получили значения от glen
до значений в fin
(кто-то может дать мне знать, какое простое отображение я слишком медленно получал), вот предложение:
glen <- data.frame(X=c(334,123,324,234,643),Y=c(213,342,344,231,575),
Z=c("A","B","C","D","E"))
finList <- apply(glen, 1, function(x) {
myName <- x["Z"]
myVal1 <- as.numeric(x["X"])-c(1:4)
myVal2 <- 5:8
return(data.frame(Z = rep(myName, length(myVal1)), V1 = myVal1, V2 = myVal2))
})
fin <- do.call("rbind", finList)
Как правило, лучше избегать выращивания объекта в цикле for
, особенно если glen
имеет много строк.
Кроме того, вы cbind
получаете результатыкаждой итерации в цикле for
, но пример fin
выглядит так, как будто вы действительно хотите rbind
.
Кроме того, каждое значение glen$Z
уникально?
РЕДАКТИРОВАТЬ
Добавлена строка в apply
, чтобы показать расчет на основе Глен.Объект x
в анонимной функции, вызванной в apply
, является частью glen
, которая передается функции.Вы даже можете выполнять вычисления на основе всего набора данных glen
внутри функции, но было бы очень полезно узнать, какие вычисления вы хотите выполнить для каждой строки.
EDIT 2
Вот пример, который рассматривает комментарий ниже о дополнительной таблице df:
df<-data.frame(begin=rep(glen$X,each=5),
finish=glen$Y-sample(-10:10,5*nrow(glen),replace=TRUE),
Val1=rnorm(5*nrow(glen)))
finList <- apply(glen, 1, function(x) {
myName <- x["Z"]
myVal1 <- subset(df, begin==x["X"]&finish<=x["Y"])$Val1
return(data.frame(Z = rep(myName, length(myVal1)), V1 = myVal1))
})
fin <- do.call("rbind", finList)