R - Создание нового столбца на основе условного наблюдения и его применение к основному df - PullRequest
0 голосов
/ 29 октября 2018

У меня очень большой фрейм данных (с ~ 15 миллионами наблюдений за 10 переменными). DF - это, по сути, результаты для множества городов при различных сценариях (условиях). Вот упрощенное представление о df:

State City Result Year Condition1 Condition2 Condition3
AL Cottonwood 4.5 2000 p5 a10 d20
....
AL Cottonwood 2.5 2010 p10 a20 d50

Я пытаюсь создать новый столбец («основание»), равный результату данного города в различных сценариях на 2000 год. Из-за множества сценариев у меня возникают большие трудности с этим.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Рассмотрим ave для расчета записей в одних и тех же нескольких группах и получим Результат , который вернется с identity().

# YEAR 2000 CALCULATION
df$Base <- with(df, ifelse(Year == 2000,
                           ave(Result, Condition1, Condition2, Condition3, FUN=identity),
                           NA)
               )

# ASSIGN 2000 RESULT TO ALL OTHER YEARS
df$Base <- with(df, ave(Base, Condition1, Condition2, Condition3, FUN=function(x) max(x, na.rm=TRUE)))

Не уверен в производительности через ~ 15 миль в час.

0 голосов
/ 29 октября 2018

То есть вы хотите сравнить каждую строку для этих условий, кроме 2000 года?

Если бы я пошел по этому пути, я бы присоединил к самому фрейму данных, отфильтрованный до 2000 года. Предполагая, что ваш фрейм данных называется df

require(dplyr)
df_base <- df %>% left_join(
  df %>% 
    filter(Year == 2000) %>% #get just year 2000 results
    select(-Year) %>% #remove year so that it does not join on it
    rename(base = result) #rename the result column of the cut dataframe to base
)

Это объединит все остальные столбцы, отличные от года, то есть того же штата и города и всех ваших условий, и вернет полный фрейм данных с новым столбцом с именем «base» с результатом 2000 года для state + city + условия. Если есть другие столбцы, к которым вы не хотите присоединяться, вы можете либо удалить их в select, либо указать все столбцы, к которым нужно присоединиться явно, используя переменную «by» в left_join.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...