【问题标题】:Count the number of observations计算观察次数
【发布时间】:2020-04-17 20:34:50
【问题描述】:

我有一个数据框,其中包含以下变量序列(标识号)、日(从周一到周日的工作日),用于记录观察的开始日期和 7 个变量 day1 到 day7,每个变量代表一天星期。第 1 天是星期一,第 7 天是星期日。

我想确定任何观察的天数。开始日期记录在 Day 中。例如,在 id 12 的情况下,天数是 7。在 id 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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以在“day”列的逻辑matrix 上使用rowSums,即通过检查值是否大于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)))
    

    数据

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 2013-03-06
      • 2021-02-22
      • 2014-06-25
      • 2022-11-07
      • 2023-03-05
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多