Как сопоставить два значения наблюдения в кадре данных и назначить значения в третьем столбце в r - PullRequest
0 голосов
/ 08 мая 2020

Прежде чем я начну объяснять, мои данные очень беспорядочные, и я не продвинутый программист, так что несите меня.

У меня есть большой фрейм данных с двумя столбцами, содержащими данные в каждой строке, и одним столбцом, содержащим распространять данные и НС. Я хочу определить значение в столбце NA, используя два других столбца, и присвоить это значение другим строкам в столбце NA, которые соответствуют другим двум столбцам.

Чтобы объяснить, что я имею в виду, у меня есть создал небольшой образец кода с фреймом данных 270 x 3:

Sample Code:

year <-c()
for (i in 1988:1990){
  y1 <- i %>% rep(30)
  year <- c(year, y1)
}

year <- year %>% rep(3)

stock <- c()
for (i in 1:18) {
  s1 <- i %>% rep(15)
  stock<- c(stock, s1)
}

df <- data.frame(year,stock)
df$group <- NA

df$group[c(24, 130, 160, 212)] <- 11
df$group[c(60, 88, 140, 240)] <- 12
df$group[c(2, 72, 100, 183)] <- 13
df$group[c(16, 47, 203, 262)] <- 14

У меня есть данные о годах и запасах в каждой строке, но группа случайна. Годы могут повторяться, потому что они являются годами совокупности ежемесячных дат и разных запасов в одни и те же даты.

Я хочу определить номер группы определенной строки и посмотреть, «сохраняется» ли этот запас 12 месяцев, имея такое же годовое значение для i + 11 строк. Затем я хочу присвоить значение группы акций в строке i значению i: (i + 11). Другими словами, я хочу увидеть, совпадают ли запасы в строке i и строке i + 11, а год такой же в строке i и i + 11

Я попытался решить эту проблему, только глядя на строки, где у нас есть данные, и создаем условия if-else внутри for l oop:

identifier <- which(!is.na(df$group))

for (i in identifier) {
  if (df$stock[i] == df$stock[i + 11]) {
    df$group[(i+1):(i+11)] <- df$group[i]
  } else {
    df$group[i] <- NA
  }
}

У меня есть две проблемы (которые я обнаружил до сих пор) с кодом:

  1. Он не смотрит на все 12 значений от i до i + 11, поэтому может привести к тому, что перекрывающиеся группы станут NA и назначат ложные группы определенным акциям и периодам.
  2. Мой исходный фрейм данных состоит из> 3м наблюдений, а для l oop требуется более 30 минут.

Мой пример кода не полностью представляет мой исходный набор данных. Некоторые акции существуют 15 лет и около 20 месяцев. Акции также могут меняться из года в год. это более эффективно?

  • Как я могу лучше структурировать данные?
  • Более эффективно искать значения в столбце, а затем назначать их другим строкам?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...