r - 如何使用 data.table 创建 mean 和 sd 列(基于多个条件)
问题描述
我已经能够根据几个条件使用包创建一个带有median
mean
and的表。为此,我准备了数据。它对我来说看起来有点草率,我使用的是一个大数据集(>3gb),所以我已经在使用了。sd
dplry
data.table
我想知道如何使用data.table
package更有效地创建一个类似的表,所以,如果可以在不准备太多数据的情况下做到这一点。那太好了,因为我也需要在许多其他条件下这样做。顺便说一句,我查看了这篇文章,但它没有添加条件。
这就是我所拥有和需要的:
自第一次或=或以来mean
,我需要con
byid
和date
= 1 年。i
i2
A04
A01
编辑(因为它之前没有运行):
数据:
DT <- structure(list(id = c(123L, 123L, 332L, 332L, 332L, 100L, 100L, 113L, 113L, 113L, 113L, 551L, 551L),
i = c("D95", "F85", "A01", "A04", "K20", "B10", "A04", "T08", "P28", "D95", "A04", "B12", "D95"),
i2 = c("F15", "", "", "", "", "", "", "", "", "A01", "", "A01", ""),
date = c("2015-06-19", "2016-08-15", "2013-03-16", "2017-01-17", "2013-01-16", "2009-05-08", "2011-04-03", "2015-05-04",
"2011-04-04", "2017-08-04", "2011-05-24", "2013-11-04", "2013-05-04"),
con = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"),
PS = c("0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1", "1", "0")),
class = "data.frame", row.names = c(NA, -13L))
以下是我到目前为止所做的(并且有效):
我根据数据创建了列PS
(= 具有orA01
或A04
in )和(=从第一次开始的天数或(此处的天数不正确))。i
i2
ds
A01
A01
有了这个dplyr
包,我首先做了一个data.table
只有ds
-365&0之间的行。
j.ds <- subset(DT, ds >= -365 & ds < 0)
比使用 per 聚合到一个表中sum
,如下所示:con
id
j <- j.ds %>%
group_by(id) %>%
summarise(con = sum(con))
从那里我制作了所需的表格:
jP <- j %>%
summarise(median = median(con), mean = mean(con), SD = sd(con))
解决方案
据我所知,对于介于 -365 和 0 之间的数据,您需要con
per的总和,然后是这些总和的平均值、中位数和标准差。这可以通过链接两个表达式来完成。id
ds
DT[ds >= -365 & ds < 0, sum(con), by = "id"][, .(mean(V1), median(V1), sd(V1))]
这首先对您的数据进行子集化,然后对con
per求和id
,然后用第二个表达式取总和的平均值等
推荐阅读
- javascript - 无法读取未定义的属性“getContext” - 电子
- python - 基于其值的标签名称 Ansible 的 EC2 实例的动态脚本清单
- devexpress - 如何使用 DevExpress 的 DockPanel 和 DocumentManager 将焦点切换到不同的选项卡
- javascript - jQuery 期望 AJAX 调用上的文本输入的数字
- ansible - 带有变量变量的模板有更好的方法吗?
- php - Laravel pluck 方法无法正确格式化对象
- angular - 如何在课堂上将数字转换为枚举打字稿
- java - 尝试使用 FileProvider 共享 MP3 文件时出现 FileNotFoundException
- three.js - 如何通过 Three.js 截屏?
- java - 蓝色第23课#我可以在这里使用for-loop吗?