【发布时间】:2018-08-08 18:04:26
【问题描述】:
我对 r 很新鲜(比如 2 天)。我有一组数据,它是在几个小时内每 200 毫秒采集一次的时间序列。这里是
head(dat):
Date Time MSec Sample Pat1 Pat2 Pat3
1 8/7/~ 14:34 411 0 100 13 13
2 8/7/~ 14:34 615 1 13 13 143
3 8/7/~ 14:34 814 2 13 13 13
4 8/7/~ 14:34 12 3 130 13 13
5 8/7/~ 14:34 216 4 13 13 130
6 8/7/~ 14:34 417 5 139 13 13
它下降了 2 个小时,所以几百个病人的几千点甚至更多。 13 是我们的基线,我们对超过 100 的活动峰值感兴趣。每当信号超过 100 时,我一直在尝试为每个患者列创建一个新列。我制定了以下代码:
dat$Pat1exc <- as.numeric(dat$Pat1 >=100)
这有效并为我提供了新列,我的数据如下所示:
Date Time MSec Sample Pat1 Pat2 Pat3 Pat1exc
1 8/7/~ 14:34 411 0 100 13 13 1
2 8/7/~ 14:34 615 1 13 13 143 0
3 8/7/~ 14:34 814 2 13 13 13 0
4 8/7/~ 14:34 12 3 130 13 13 1
5 8/7/~ 14:34 216 4 13 13 130 0
6 8/7/~ 14:34 417 5 139 13 13 1
这正是我想要的,但我不知道如何遍历每一列来创建 Pat2exc、Pat3exc 等。我想我可以在创建函数后使用 sapply 或 vapply。但是,我无法使该功能正常工作。
excite <- function(x, y) {y <- as.numeric(x >=100)}
excite(x=dat$Pat2, y=dat$Pat2exc)
这不会给我任何错误,但不会修改 dat 数据框。本质上,最后我只想总结所有兴奋的列(> = 100)。如果有一种更简单的方法可以为每位患者计算超过 100 个样本,那么我也很乐意学习如何做到这一点。
抱歉,如果不清楚。提前致谢。
P.S.:我也在寻找一种结合 Time 和 Msec 列的好方法。
编辑:在未缩写的数据中添加:
Date Time Msecs
8/7/2018 14:34:07 411
8/7/2018 14:34:07 615
8/7/2018 14:34:07 814
8/7/2018 14:34:08 12
8/7/2018 14:34:08 216
8/7/2018 14:34:08 417
8/7/2018 14:34:08 619
8/7/2018 14:34:08 816
8/7/2018 14:34:09 15
【问题讨论】:
-
您希望如何组合
Time和Msec?Msec代表什么? -
哦,对不起,是毫秒。
Time列已缩写,但应为 14:34:02 或%H%:%M%:%S%。理想情况下,这两者可以组合成14:34:02.411,,但仍然可以作为时间而不是字符串来读取。 -
如果是这样,您会提供
Time的非缩写版本吗?或者只要和Msec结合,你就不在乎秒数? (即我可以将 00 秒附加到Time) -
好的,我将非缩写数据放入我的编辑中。基本上,我的数据为我提供了日期、时间以及小时、分钟和秒,在另一列中,我得到每个点的毫秒数。我一直只使用
Time来分析这个,但我认为R 也可以理解毫秒。