【问题标题】:Calculate value using row with pattern使用带模式的行计算值
【发布时间】:2021-08-14 15:08:47
【问题描述】:

我有这些输入: 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) 与前 10 个字符中的相同任务 2 (S101-10061-74716) 相同,如果同样找到与帧数的绝对差异,请在此处示例 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))
                        )
    )

但它没有帮助,如何逐行比较?有什么想法吗?

【问题讨论】:

  • 6 和 16 的差异如何等于 6(第一个差异)?而 32 和 74 等于 24(第三个差异)?

标签: r dataframe dplyr tidyr


【解决方案1】:

这是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"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2022-01-19
    • 2015-06-05
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多