Трудно было решить эту проблему.Так эффективно я пытаюсь выбрать ячейку в широком фрейме данных, где значения в одном столбце содержатся в строке имени столбца.Я обычно использую тидиверс в своих рабочих процессах и не могу заставить что-либо в этом стихе работать.Пробовал применять, для циклического прохождения рядов.Есть некоторые вещи, чтобы работать, но они очень медленные.Прикрепленный фрагмент фрейма данных - это только первые 10 строк фрейма данных с 1,8 миллионами строк.Так что использование tidy::gather
здесь не может быть и речи.Любые мысли о том, как я мог бы выполнить это, были бы очень полезны, потому что это происходит намного чаще, чем я ожидал.
Данные можно найти здесь
library(tidyverse)
library(foreach)
df <- read_csv('test_data.csv')
Итак, здесь я пытаюсь найти переменную для fire_year
, которая содержится в широких полях var_
.Так, например, здесь, если fire_year
= 1998, я бы хотел зафиксировать значение в столбце с именем var_1998
.Это самое близкое мне решение для получения решения (и оно работает!), Но для полного кадра данных это навсегда:
df_slim <- foreach(df=iter(df, by='row'), .combine=rbind,
.packages = c('dplyr', "tidyverse")) %do% {
df_out <- df %>%
gather(key = key, value = out_var, -fpa_id, -fire_year) %>%
separate(key,
into = c("tmp1", 'zyear'),
sep = "_") %>%
mutate(var = ifelse(fire_year == zyear, out_var, NA)) %>%
na.omit() %>%
dplyr::select(fpa_id, fire_year, var)
return(df_out)
}
Я не могу придумать быстрый, эффективный способ достичь своей жизни!На данный момент я подсчитал, что это займет 160 часов для завершения цикла for во фрейме данных с 1,7 миллионами строк!Если бы кто-то мог указать мне правильное направление, я был бы вечно благодарен!
Спасибо!