如何计算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