如何计算R中此数据帧的差异

如何计算R中此数据帧的差异,r,R,我有多个列,但以下是我的一小部分数据: df我们可以先将格式改为“长”格式,然后通过diff跨M、N列进行分组 library(dplyr) library(tidyr) library(stringr) df %>% pivot_longer(cols = everything(), names_to = c(".value", 'grp'), names_sep = "(?<=[^0-9])(?=[0-9])")

我有多个列,但以下是我的一小部分数据:


df我们可以先将格式改为“长”格式,然后通过
diff
M、N列进行分组

library(dplyr)
library(tidyr)
library(stringr)
df %>% 
   pivot_longer(cols = everything(), names_to = c(".value", 'grp'), 
       names_sep = "(?<=[^0-9])(?=[0-9])") %>% 
   group_by(Var = str_sub(Var, 1, 2)) %>% 
   summarise(across(c(M, N), ~ -diff(.), .names = "diff{.col}"), .groups = 'drop')
# A tibble: 3 x 3
#  Var   diffM diffN
#  <chr> <dbl> <dbl>
#1 A1     0.7   -0.5
#2 A2     0.4    0.3
#3 A3     1     -0.8

A
数据表
选项

rbindlist(
  split.default(
    setDT(df),
    gsub("\\D", "", names(df))
  ),
  use.names=FALSE
)[
  ,
  setNames(
    lapply(.SD, function(x) diff(rev(x))),
    paste0("diff", gsub("\\d", "", names(.SD)))
  ),
  by = .(Var = gsub("\\d$", "", Var1))
]
给予


令人惊叹的如果我想算出“N”的总数,你能帮我吗?Thanks@user330我更新了帖子。请检查pivot\u的功能是否强大,使用是否方便,太棒了!我不知道
data.table::melt
是否可以以类似的方式使用
rbindlist(
  split.default(
    setDT(df),
    gsub("\\D", "", names(df))
  ),
  use.names=FALSE
)[
  ,
  setNames(
    lapply(.SD, function(x) diff(rev(x))),
    paste0("diff", gsub("\\d", "", names(.SD)))
  ),
  by = .(Var = gsub("\\d$", "", Var1))
]
   Var diffM diffN
1:  A1   0.7  -0.5
2:  A2   0.4   0.3
3:  A3   1.0  -0.8