извлекать данные на одну строку ниже на основе конкретных условий - PullRequest
0 голосов
/ 11 мая 2018

имеют очень большие данные ~ 1 ГБ и хотели бы извлечь сводные данные с таким условием:

for loop: if(a[i] == 999) then extract b[i+1] else next

чтобы я мог table(b) найти его распределение / состав, предполагая, что столбец b имеет символ класса, столбец a имеет класс целое

мой код R:

summary123 <- data.frame()
j = 1
k = 1
for(i in 1:nrow(df1)){
  if(df1$a[i] == 999 & i != nrow(df1)){
    j = i + 1
    summary123[k,1] <- df1$b[j]
    k = k + 1
  }
  else{
    next
  }
}

однако это занимает много времени, хотелось бы получить более быстрый эквивалент R-кода

1 Ответ

0 голосов
/ 11 мая 2018

Используйте lead из dplyr:

output=lead(df1$b,1)[df1$a==999]

Тогда вы ищете ответ:

output[-1]

(в основном удаление последнего элемента, который является NA введено функцией lead)

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