Как посмотреть ВСЕ ведущие / отстающие значения в R - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я пытаюсь выяснить, как определить, есть ли какие-либо данные перед любой заданной точкой данных в столбце. Или наоборот, все строки отстают от данных. В настоящее время у меня есть следующее:

> df = data.frame(col = c(0,0,0,1,0))
> mutate(df, data_following = lead(col)>0)
  col data_following
1   0          FALSE
2   0          FALSE
3   0           TRUE
4   1          FALSE
5   0             NA

Это говорит мне, есть ли впереди строка данных ОДНА для каждой строки. Я хотел бы знать, есть ли данные в ЛЮБОМ из строк перед каждой строкой (т.е. все ведущие строки). Мой желаемый вывод был бы:

> mutate(df, data_following = some_function(col))
  col data_following
1   0           TRUE
2   0           TRUE
3   0           TRUE
4   1          FALSE
5   0          FALSE

Я мог бы, вероятно, построить al oop или что-то, но я бы предпочел что-то более чистое ... в идеале, что я могу просто подключиться к mutate (). Я пытался нанести удар в этом несколько раз, но я еще ничего не придумал. Кроме того, я работаю с сгруппированным фреймом данных ... надеюсь, не актуально, но стоит упомянуть.

Спасибо !!

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете проверить, равна ли накопленная сумма столбца сумме столбца, потому что, если они равны, в столбце не осталось больше 1.

> df = data.frame(col = c(0,0,0,1,0))
> dplyr::mutate(df,data_following = !sum(col) == cumsum(col))

  col data_following
1   0           TRUE
2   0           TRUE
3   0           TRUE
4   1          FALSE
5   0          FALSE

Разбиение его на шаги может сделать логику c более интуитивной:

> dplyr::mutate(df,
                df_sum = sum(col),
                df_cumsum = cumsum(col),
                data_following = !df_sum == df_cumsum)

  col df_sum df_cumsum data_following
1   0      1         0           TRUE
2   0      1         0           TRUE
3   0      1         0           TRUE
4   1      1         1          FALSE
5   0      1         1          FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...