Суммирование строк с заданными интервалами c столбцов - PullRequest
1 голос
/ 16 июня 2020

У меня есть большой фрейм данных из 1129 строк и 4662 столбцов. Я хочу суммировать значения строк в кадре данных с интервалами в каждые 3 столбца, а затем возвращать 1 для каждой из этих сумм, если сумма строк в каждых 3 столбцах была> 0, или возвращать 0, если сумма <1. Ниже я добавил небольшой воспроизводимый пример. Я хотел бы просуммировать значения строк из столбца 1 в столбец 3, а затем значения строк из столбца 4 в столбец 8 (и так далее в моих реальных данных). </p>

df <- read.table(text ="     2005-09-23_2005-09-26  2005-09-27_2005-10-30  2005-10-07_2005-10-08  2005-10-09_2005-10-10  2005-10-11_2005-10-12  2005-10-13_2005-10-14
1  1       0     1     1     1     1           
2  1       1     0     0     0     0     
3  NA      NA    NA     NA     NA     0", header = TRUE)

Результат, который я получил после было бы так:

result <- read.table(text ="     2005-09-23_2005-10-08  2005-10-09_2005-10-14
1  1       1           
2  1       0     
3  NA      0", header = TRUE)

Я искал похожие вопросы, и кажется, что rollapply ( R: суммирование по интервалу строк ) ИЛИ rowum может работать ( R: суммирование в интервале строк ), но я не могу найти способ суммировать строки, используя столбцы в качестве интервалов вместо строк, или как сделать это в повторяющейся последовательности. Не мог бы кто-нибудь помочь мне с кодом для этого? Спасибо большое!

1 Ответ

1 голос
/ 16 июня 2020

Это работает только в том случае, если количество столбцов делится на интервал.

+(sapply(split.default(df,unlist(lapply(1:(ncol(df)/3),rep,3))),rowSums) > 0)
   1  2
1  1  1
2  1  0
3 NA NA

может быть, кто-то другой найдет более элегантный способ создания разделения, кроме
unlist(lapply(1:(ncol(df)/3),rep,3))

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