r - 创建一个新变量,标记 R 中绝对值变化的每个实例
问题描述
我正在处理来自运动传感器的处理过的数据,并且需要一些帮助来操作数据集。我的变量包括“时间”(以毫秒为单位)和“肩屈”(以角度为单位)。我想创建一个新变量,每当“肩屈”变量的绝对值变化为 3 度时,该变量就会标记。就像是:
newdata <- mydata %>%
mutate(changevariable = ifelse(Shoulder.Flexion = [absolute value change in 3 degrees], "1", "0")
,其中每个标志/“1”在±3度的序列中。
我的数据集的一个例子:
structure(list(Time = c(0, 0.0078125, 0.015625, 0.023438, 0.03125,
0.039062, 0.046875, 0.054688, 0.0625, 0.070312, 0.078125, 0.085938,
0.09375, 0.10156, 0.10938, 0.11719, 0.125, 0.13281, 0.14062,
0.14844), Shoulder.Flexion = c(-9.4721, -12.098, -12.51, 12.253,
11.815, 11.385, 11.03, 10.766, 10.586, 10.472, 10.408, 10.381,
10.383, 10.407, 10.453, 10.521, 10.605, 10.695, 10.778, 10.846
)), row.names = c(NA, 20L), class = "data.frame")
这一点是为了帮助我生成一个对象在指定时间间隔内旋转 3 度的次数的值。任何帮助将非常感激。
提前致谢。
解决方案
根据您拥有的数据量,您可以考虑使用循环。我确实尽量避免for
一般的循环,并且认为data.table
解决方案可能会更有帮助和更可取。
mydata$Shoulder.Flexion = c(9,10,10.5,11.7,12.1,13,13.5,14,15.9,16.2,17.4,18.6,19,18.5,17.5,17,15,14,13,12)
ref = mydata[1,2]
mydata$changevariable <- 0
for (i in 2:nrow(mydata)) {
if (abs(mydata[i, 2] - ref) >= 3) {
mydata[i, "changevariable"] <- 1
ref = mydata[i, 2]
}
}
输出
Time Shoulder.Flexion changevariable
1 0.0000000 9.0 0
2 0.0078125 10.0 0
3 0.0156250 10.5 0
4 0.0234380 11.7 0
5 0.0312500 12.1 1
6 0.0390620 13.0 0
7 0.0468750 13.5 0
8 0.0546880 14.0 0
9 0.0625000 15.9 1
10 0.0703120 16.2 0
11 0.0781250 17.4 0
12 0.0859380 18.6 0
13 0.0937500 19.0 1
14 0.1015600 18.5 0
15 0.1093800 17.5 0
16 0.1171900 17.0 0
17 0.1250000 15.0 1
18 0.1328100 14.0 0
19 0.1406200 13.0 0
20 0.1484400 12.0 1
编辑:
目前还不清楚需要什么。拥有一个包含changevariable
示例数据的“最终”所需数据框将有所帮助。拥有超过 3 度的更多变化的不同样本数据也可能会有所帮助。
这是基础 R 中的另一个版本,它计算行之间的差异,获取这些差异的绝对值,然后逐步计算这些差异以计算累积和。当总和大于 3 时,则changevariable
设置为 1,累积和重置为零。
让我知道这是否更接近:
mydata$diff <- ave(mydata$Shoulder.Flexion, FUN = function(x) c(0, abs(diff(x))))
total = 0
mydata$changevariable <- 0
for (i in 2:nrow(mydata)) {
total <- total + mydata[i, "diff"]
if (total >= 3) {
mydata[i, "changevariable"] <- 1
total = 0
}
}
Time Shoulder.Flexion diff changevariable
1 0.0000000 -9.4721 0.0000 0
2 0.0078125 -12.0980 2.6259 0
3 0.0156250 -12.5100 0.4120 1
4 0.0234380 12.2530 24.7630 1
5 0.0312500 11.8150 0.4380 0
6 0.0390620 11.3850 0.4300 0
7 0.0468750 11.0300 0.3550 0
8 0.0546880 10.7660 0.2640 0
9 0.0625000 10.5860 0.1800 0
10 0.0703120 10.4720 0.1140 0
11 0.0781250 10.4080 0.0640 0
12 0.0859380 10.3810 0.0270 0
13 0.0937500 10.3830 0.0020 0
14 0.1015600 10.4070 0.0240 0
15 0.1093800 10.4530 0.0460 0
16 0.1171900 10.5210 0.0680 0
17 0.1250000 10.6050 0.0840 0
18 0.1328100 10.6950 0.0900 0
19 0.1406200 10.7780 0.0830 0
20 0.1484400 10.8460 0.0680 0
推荐阅读
- javascript - FeathersJS:在服务测试中注入 HTTP 标头
- html - 如何让两个列表项出现在页面的另一侧?
- node.js - 如何将多个图像上传到 Sails.js 应用程序
- c++ - 为什么在带有 gcc5 的 macosx Mojave 10.14 中缺少 charconv 标头?
- domain-driven-design - DDD 关于设计决策
- reactjs - 打字稿:定义嵌套对象的接口“需要一个键”
- spring-boot - 无法为使用 maven-shaded-plugin 创建的 jar 获取条目 BOOT-INF/lib 的嵌套存档
- javascript - 从 VueJS 的父组件中引用子组件的索引
- javascript - Fetch 不发送帖子数据
- javascript - Access variable's value by Prototype in Node