r - 尝试通过增加 R 中的时间步长来缩小数据帧的大小
问题描述
我有一列以毫秒为单位记录时间,从 0 开始并均匀增加 0.001。我想通过创建一个只记录每十毫秒发生的行的新数据框来缩小我的数据框。
我的问题是数据是长格式的,并非所有参与者都花费相同的时间来完成任务,所以我不能每 10 行一次。
尝试澄清一下,这意味着每当时间列中有 0.000 时,我想将此点记录在新的数据帧中,然后重新开始每十分之一毫秒的过程。到目前为止,我已经尝试使用“过滤器”和“子集”但没有成功。
这是我拥有的数据的一个小例子:
ID | 时间 | X | 是 |
---|---|---|---|
1 | 0.000 | 1 | 5 |
1 | 0.001 | 2 | 10 |
1 | 0.002 | 3 | 15 |
1 | 0.003 | 4 | 20 |
1 | 0.004(依此类推……直到 0.052) | ... | ... |
1 | 0.053 | 10 | 25 |
2 | 0.000 | 30 | 30 |
2 | 0.001 | 35 | 35 |
2 | 0.002(依此类推...直到 0.036) | ... | ... |
2 | 0.037 | 50 | 55 |
3 | 0.000 | 55 | 50 |
这就是我想要的:
ID | 时间 | X | 是 |
---|---|---|---|
1 | 0.000 | 1 | 5 |
1 | 0.010 | 30 | 40 |
1 | 0.020 | 35 | 45 |
1 | 0.030 | 30 | 40 |
1 | 0.040 | 33 | 44 |
1 | 0.050 | 60 | 100 |
2 | 0.000 | 30 | 30 |
2 | 0.010 | 40 | 40 |
2 | 0.020 | 50 | 50 |
2 | 0.030 | 60 | 60 |
3 | 0.000 | 55 | 50 |
解决方案
你可以试试下面的subset
++ave
duplicated
subset(
df,
!ave(Time, ID, FUN = function(x) duplicated(ceiling(seq_along(x) / 10)))
)
这使
ID Time
1 1 0.00
11 1 0.01
21 1 0.02
31 1 0.03
41 1 0.04
51 1 0.05
55 2 0.00
65 2 0.01
75 2 0.02
85 2 0.03
92 3 0.00
数据
> dput(df)
structure(list(ID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3), Time = c(0,
0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009,
0.01, 0.011, 0.012, 0.013, 0.014, 0.015, 0.016, 0.017, 0.018,
0.019, 0.02, 0.021, 0.022, 0.023, 0.024, 0.025, 0.026, 0.027,
0.028, 0.029, 0.03, 0.031, 0.032, 0.033, 0.034, 0.035, 0.036,
0.037, 0.038, 0.039, 0.04, 0.041, 0.042, 0.043, 0.044, 0.045,
0.046, 0.047, 0.048, 0.049, 0.05, 0.051, 0.052, 0.053, 0, 0.001,
0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01,
0.011, 0.012, 0.013, 0.014, 0.015, 0.016, 0.017, 0.018, 0.019,
0.02, 0.021, 0.022, 0.023, 0.024, 0.025, 0.026, 0.027, 0.028,
0.029, 0.03, 0.031, 0.032, 0.033, 0.034, 0.035, 0.036, 0)), row.names = c(NA,
-92L), class = "data.frame")
推荐阅读
- android - Flutter:来自小部件列表的自定义多项选择行
- django - Django用timedelta注释日期并增加
- javascript - 用 vanilla js 替换部分背景图像 url 以获得一系列图像
- javascript - 为什么我的 svelte js 路由器链接组件在尝试使用插槽时会破坏演示 SPA 项目中的路由?
- amazon-web-services - AWS 将大量 ENV 变量传递到 codebuild
- python - 如何获得空输入?
- matplotlib - “放大”小提琴图,同时保持准确的四分位线(matplotlib/seaborn)
- javascript - ReferenceError:文档未定义(JavaScript)
- docker - Openshift - 使用 alpine、java 和 jmeter 运行基本容器
- ios - SwiftUI 自定义启动屏幕?