Подсчитайте количество наблюдений - PullRequest
1 голос
/ 17 апреля 2020

У меня есть фрейм данных со следующими переменными: серийный (идентификационный номер), день (дни недели с понедельника по воскресенье), который используется для записи начального дня наблюдения, и 7 переменных от дня 1 до дня 7, каждая из которых представляет день неделя. День 1 - понедельник, а день 7 - солнце.

Я бы хотел указать количество дней любого наблюдения. Начальный день записывается в День. Например, в случае идентификатора 12 число дней равно 7. В случае идентификатора 9 равно 4.

Один из способов сделать это - использовать функцию colSum (). Это лучше / быстрее?

Ввод:

  serial  day1 day2 day3 day4 day5 day6 day7 Day
    12    2    1    2    1    1    3    1   Monday
   123    0    3    0    3    3    0    3   Tuesday
    10    0    3    3    3    3    3    3   Thursday

Ввод:

serial  Length
    12      7       
    123     4       
    10      6

1 Ответ

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

Мы можем использовать rowSums в логическом matrix столбца «день», т. Е. Проверяя, больше ли значения 0

cbind(df1['serial'], Length = rowSums(df1[startsWith(names(df1), 'day')] > 0))
#    serial Length
#1     12      7
#2    123      4
#3     10      6

. Или другой вариант - Reduce с lapply

cbind(df1['serial'], Length = Reduce(`+`, 
           lapply(df1[startsWith(names(df1), 'day')], `>`, 0)))

data

df1 <- structure(list(serial = c(12L, 123L, 10L), day1 = c(2L, 0L, 0L
), day2 = c(1L, 3L, 3L), day3 = c(2L, 0L, 3L), day4 = c(1L, 3L, 
3L), day5 = c(1L, 3L, 3L), day6 = c(3L, 0L, 3L), day7 = c(1L, 
3L, 3L), Day = c("Monday", "Tuesday", "Thursday")),
class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...