我想得到每天的病例数,包括零.这是我的数据帧示例:

set.seed(1453); ID = sample(1:4, 10, TRUE)
date = c('2016-01-01', '2016-01-05', '2016-01-07',  '2016-01-12',  '2016-01-16',  '2016-01-20',
         '2016-01-20',  '2016-01-25',  '2016-01-26',  '2016-01-31')
df = data.frame(ID, date = as.Date(date))

所以我知道2016-01-01年有一例是ID-1,然后2016-01-20年有一例是ID-1.所以我想得到一个从2016-01-012016-01-31的数据帧,这两天是1,否则是0.我希望每ID个都一样.所以这个例子显示了每ID个事件中有一个,但在我的实际数据框架中,每ID个事件中每天有15个 case .

我用过:

M <- function(timeStamps) {
  Dates <- as.Date(strftime(df$date, "%Y-%m-%d"))
  allDates <- seq(from = min(Dates), to = max(Dates), by = "day")
  Admission <- sapply(allDates, FUN = function(X) sum(Dates == X))
  data.frame(day = allDates, Admission = Admission)
}
MM<-M(df$date)

但如果我 for each ID创建一个数据帧,MM只会给出我想要的结果.

我用this example做了同样的练习,但我在这里得到了每月的汇总结果.理想情况下,考虑到每ID个事件中有0个事件,我可以每天聚合一个类似的数据帧.

推荐答案

使用当前函数,我们可以通过"ID"列将"date"设置为split,应用该函数,并将list输出rbind到单个数据.以ID作为另一列的框架

lst1 <- lapply(split(df$date, df$ID), M)
out <- do.call(rbind, Map(cbind, ID = names(lst1), lst1))
row.names(out) <- NULL

-输出

> str(out)
'data.frame':   124 obs. of  3 variables:
 $ ID       : chr  "1" "1" "1" "1" ...
 $ day      : Date, format: "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" ...
 $ Admission: int  1 0 0 0 1 0 1 0 0 0 ...
> head(out)
  ID        day Admission
1  1 2016-01-01         1
2  1 2016-01-02         0
3  1 2016-01-03         0
4  1 2016-01-04         0
5  1 2016-01-05         1
6  1 2016-01-06         0

或者使用tidyverse,按操作分组

library(dplyr)
library(tidyr)
df %>%
  group_by(ID) %>% 
  summarise(out = M(date), .groups = 'drop') %>%
  unpack(out)

-输出

# A tibble: 124 × 3
      ID day        Admission
   <int> <date>         <int>
 1     1 2016-01-01         1
 2     1 2016-01-02         0
 3     1 2016-01-03         0
 4     1 2016-01-04         0
 5     1 2016-01-05         1
 6     1 2016-01-06         0
 7     1 2016-01-07         1
 8     1 2016-01-08         0
 9     1 2016-01-09         0
10     1 2016-01-10         0
# … with 114 more rows

R相关问答推荐

如何从其他前面列中减go 特定列的平均值?

将模拟变量乘以多个观测结果中的模拟变量

将复杂的组合列表转换为数据框架

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

过滤器数据.基于两列的帧行和R中的外部向量

Highcharter多次钻取不起作用,使用不同方法

如何使用R对每组变量进行随机化?

用值序列对行进行子集化,并标识序列开始的列

如何从R ggplot图片中获取SVG字符串?

将多列合并为单独的名称—值对

如何使用ggplot对堆叠条形图进行嵌套排序?

通过在colname中查找其相应值来创建列

打印XTS对象

Data.table';S GForce-将多个函数应用于多列(带可选参数)

如何移除GGPlot中超出与面相交的任何格网像元

如何根据未知数的多列排除重复行

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

如何更改包中函数中的参数?

如何在R中使用因子行求和?