使用带模式的行计算值
Calculate value using row with pattern
我有这些输入:
df
# A tibble: 53 x 2
Task Frame
<chr> <int>
1 S101-10061 6
2 S101-10061-74716 16
3 S101-10065 18
4 S101-10065-104934 16
5 S101-10071 32
6 S101-10071-104898 74
7 S101-10072 8
8 S101-10072-79124 58
9 S101-10074 38
10 S101-10075 82
正如您在同一个“任务”中看到的,前 10 个字符有时是相同的。所以我需要找到任务是相同的,例如任务 1 (S101-10061) 和任务 2 (S101-10061-74716) 在前 10 个字符中相同,如果相同的任务从帧数中找到绝对差异,则在此处示例 16-6=10。所以我希望是这样的:
Task Frame Diff
<chr> <int> <int>
1 S101-10061 6 6
2 S101-10061-74716 16
3 S101-10065 18 2
4 S101-10065-104934 16
5 S101-10071 32 24
6 S101-10071-104898 74
7 S101-10072 8 50
8 S101-10072-79124 58
9 S101-10074 38
10 S101-10075 82
我试过了:
df %>% mutate(
Diff = accumulate(
Frame[1:n()], function(x,y)(abs(x-y))
)
)
但这并没有帮助,如何逐行比较?有什么想法吗?
这是一个dplyr
解决方案。
library(dplyr)
df %>%
mutate(Task = substr(Task, 1, 10)) %>%
group_by(Task) %>%
mutate(Diff = abs(Frame - lead(Frame)))
数据。
df <-
structure(list(Task = c("S101-10061", "S101-10061-74716", "S101-10065",
"S101-10065-104934", "S101-10071", "S101-10071-104898", "S101-10072",
"S101-10072-79124", "S101-10074", "S101-10075"), Frame = c(6L,
16L, 18L, 16L, 32L, 74L, 8L, 58L, 38L, 82L)), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
我有这些输入: df
# A tibble: 53 x 2
Task Frame
<chr> <int>
1 S101-10061 6
2 S101-10061-74716 16
3 S101-10065 18
4 S101-10065-104934 16
5 S101-10071 32
6 S101-10071-104898 74
7 S101-10072 8
8 S101-10072-79124 58
9 S101-10074 38
10 S101-10075 82
正如您在同一个“任务”中看到的,前 10 个字符有时是相同的。所以我需要找到任务是相同的,例如任务 1 (S101-10061) 和任务 2 (S101-10061-74716) 在前 10 个字符中相同,如果相同的任务从帧数中找到绝对差异,则在此处示例 16-6=10。所以我希望是这样的:
Task Frame Diff
<chr> <int> <int>
1 S101-10061 6 6
2 S101-10061-74716 16
3 S101-10065 18 2
4 S101-10065-104934 16
5 S101-10071 32 24
6 S101-10071-104898 74
7 S101-10072 8 50
8 S101-10072-79124 58
9 S101-10074 38
10 S101-10075 82
我试过了:
df %>% mutate(
Diff = accumulate(
Frame[1:n()], function(x,y)(abs(x-y))
)
)
但这并没有帮助,如何逐行比较?有什么想法吗?
这是一个dplyr
解决方案。
library(dplyr)
df %>%
mutate(Task = substr(Task, 1, 10)) %>%
group_by(Task) %>%
mutate(Diff = abs(Frame - lead(Frame)))
数据。
df <-
structure(list(Task = c("S101-10061", "S101-10061-74716", "S101-10065",
"S101-10065-104934", "S101-10071", "S101-10071-104898", "S101-10072",
"S101-10072-79124", "S101-10074", "S101-10075"), Frame = c(6L,
16L, 18L, 16L, 32L, 74L, 8L, 58L, 38L, 82L)), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))