В настоящее время я работаю с очень большим набором данных высот, для которого мне нужно приписать определенные температуры для каждой строки на основе заданной отметки с интервалами в 10 м.Поскольку набор данных очень большой, я не могу написать простой цикл.Я создал меньший поддельный набор данных, чтобы продемонстрировать, чего я пытаюсь достичь.
elevation <- seq(0, 100, 10)
e <- runif(n=100,min=0,max=100)
lettertype <- c(rep("a", 25), rep("b", 25), rep("c", 50))
x <- data.frame(e, lettertype)
Winter <- runif(n=10, min=10, max=15)
Spring <- runif(n=10, min=12, max=16)
Summer <- runif(n=10, min=14, max=20)
Fall <- runif(n=10, min=11, max=16)
elevbin <- c("0 to 10", "10 to 20", "20 to 30", "30 to 40", "40 to 50",
"50 to 60", "60 to 70", "70 to 80", "80 to 90", "90 to 100")
y <- data.frame(elevbin, Winter, Spring, Summer, Fall)
Wintertemp <- c()
for (i in 1:length(y$Winter)){
for (j in 1:length(elevation)){
for (k in 1:length(x$e)){
Wintertemp <- c(Wintertemp, (ifelse(x$e[k] >= elevation[j] & x$e < elevation[j+1], y$Winter[i], NA)))
}
}
}
По существу, высота - это вектор, который будет указывать циклу for превышения в каждом бине (опять же, это должно быть автоматизировано из-за размера набора данных, охватывающего 200 бинов высоты).
Фрейм данных x является примером необработанных данных о высоте, которые у меня были, столбец "lettertype" не важен, это было просто дополнение, чтобы превратить вектор e в фрейм данных,
Фрейм данных y содержит информацию о том, какие температуры (по сезонам, в этом примере я использую только зиму, но мне нужно делать это для каждого сезона) представлены в каждом бункере отметок.
Я хочу привязать вывод к фрейму данных x
Например:
head(x)
e lettertype
1 5.801268 a
2 99.115869 a
3 31.928297 a
4 25.886745 a
5 93.288743 a
6 23.496359 a
y
elevbin Winter
1 0 to 10 12.51486
2 10 to 20 14.14977
3 20 to 30 10.19768
4 30 to 40 12.63925
5 40 to 50 10.18445
6 50 to 60 10.91821
7 60 to 70 13.00326
8 70 to 80 11.89128
9 80 to 90 13.88241
10 90 to 100 12.33358
Так что я хотел бы, чтобы мойрезультат будет:
head(x)
e lettertype Winter
1 5.801268 a 12.51486
2 99.115869 a 12.33358
3 31.928297 a 12.63925
4 25.886745 a 10.19768
5 93.288743 a 12.33358
6 23.496359 a 10.19768
Проще говоря, я хочу назначить правильную температуру для каждого возвышения (e) в кадре данных x, основываясь на температурах из ячеек высот.
В настоящее время код возвращает вектор длиной 1100000 с символами NA и первым числом в зимнем векторе, что неверно.Результат должен быть такой же длины, что и x dataframe.
Любая помощь будет отличной!Заранее спасибо!