r - 如何在 R 中计算此数据框的差异
问题描述
我有多个列,但这是我的一小部分数据:
df<- read.table(text = "Var1 M1 N1 Var2 M2 N2 Var3 M3 N3 Var4 M4 N4 Var5 M5 N5 Var6 M6 N6
A11 1 0 A12 0.3 0.5 A21 1 0.3 A22 0.6 0 A31 1 0.2 A32 0 1
", header = TRUE)
我想计算 M 和 N 的差异。所以,Ma-Mb 和 Na-Nb 得到下表
Var diffM diffN
A1 0.7 -0.5
A2 0.4 0.3
A3 1 -0.8
解决方案
我们可以先重塑为“长”格式,然后按diff
across
“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
如果我们想要sum
for 'N',在summarise
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}"),
sumN = sum(N), .groups = 'drop')
# A tibble: 3 x 4
# Var diffM diffN sumN
# <chr> <dbl> <dbl> <dbl>
#1 A1 0.7 -0.5 0.5
#2 A2 0.4 0.3 0.3
#3 A3 1 -0.8 1.2
推荐阅读
- mariadb - 多主服务器的 Galera 集群:第二个节点无法在 Ubuntu 16.04.4 x64 中启动
- python - Pandas loc 仅适用于对象类型
- python - Pyping 安装错误
- r - 使用 Linux Mint 获取最新版本的 R
- android - 在 json 中使用 HTML 颜色标签
- javascript - JavaScript 中的函数式组合
- opencv - OpenCV Mat 到 Id2d1Bitmap
- eclipselink - 用于版本控制和乐观锁定的 JPA 2.1 时间戳类型字段总是抛出 OptimisticLockException
- laravel - laravel phpunit 测试期望状态码 201 但收到 302?
- php - 标准 Sql 查询与 php 和 codeigniter 框架中的准备语句