我正在执行一些手动数据清理,我想加快处理速度.我有如下数据帧:

ID V1 V2 V3 V4 V5 Group Categorical_1 Categorical_2 Categorical_3
A   1 2  2  2  2  B21       [Text]      [Text]        [Text]
B   2 3  5  8  3  B24       [Text]      [Text]        [Text]
C   3 4  6  1  1  A28       [Text]      [Text]        [Text]
D   4 1  5  7  8  A61       [Text]      [Text]        [Text]
E   5 2  8  3  2  A62       [Text]      [Text]        [Text]
F   6 3  9  5  9  C91       [Text]      [Text]        [Text]
G   7 4  1  4  6  D90       [Text]      [Text]        [Text]

假设我想要为ID H和I.H创建新行.H的组应该是B22.我希望它的所有变量都是从B2开始的组中其他单位的变量的平均值.ID i,应该是A64组,它的变量应该是从A6开始的组中所有单位的平均值.分类变量是我不希望复制或平均到新行ID的文本.因此,输出将如下所示:

ID V1 V2 V3 V4 V5 Group Categorical_1 Categorical_2 Categorical_3
A   1 2  2  2  2  B21       [Text]      [Text]        [Text]
B   2 3  5  8  3  B24       [Text]      [Text]        [Text]
C   3 4  6  1  1  A28       [Text]      [Text]        [Text]
D   4 1  5  7  8  A61       [Text]      [Text]        [Text]
E   5 2  8  3  2  A62       [Text]      [Text]        [Text]
F   6 3  9  5  9  C91       [Text]      [Text]        [Text]
G   7 4  1  4  6  D90       [Text]      [Text]        [Text]
H   1.5 2.5 3.5 5 2.5 B22       
I   4.5 1.5 6.5 5 5 A64

对于具有不同ID的许多不同观察,我需要手动重复此操作,那么如何设置代码,使其在重复此过程时易于修改?最好是在dplyr年内做到这一点,但欢迎任何建议.

推荐答案

一种 Select 是对Group以‘A6’或‘B2’开头的行进行filter次分组,然后按‘Group’的substring进行分组,得到numeric列中的mean列并与原始数据绑定

library(stringr)
library(dplyr)
df1  %>% 
  filter(str_detect(Group, "^(A6|B2|IPG2)")) %>% 
  group_by(Group = str_replace(Group, "^([A-Z]+\\d)\\d+", "\\1")) %>%
  summarise(across(where(is.numeric), mean), .groups = 'drop') %>% 
  mutate(ID = c("H", "I"), .before = 1) %>%
  mutate(Group = str_c(Group, c("4", "2"))) %>% 
  bind_rows(df1, .)

-输出

 ID  V1  V2  V3 V4  V5 Group Categorical_1 Categorical_2 Categorical_3
1  A 1.0 2.0 2.0  2 2.0   B21        [Text]        [Text]        [Text]
2  B 2.0 3.0 5.0  8 3.0   B24        [Text]        [Text]        [Text]
3  C 3.0 4.0 6.0  1 1.0   A28        [Text]        [Text]        [Text]
4  D 4.0 1.0 5.0  7 8.0   A61        [Text]        [Text]        [Text]
5  E 5.0 2.0 8.0  3 2.0   A62        [Text]        [Text]        [Text]
6  F 6.0 3.0 9.0  5 9.0   C91        [Text]        [Text]        [Text]
7  G 7.0 4.0 1.0  4 6.0   D90        [Text]        [Text]        [Text]
8  H 4.5 1.5 6.5  5 5.0   A64          <NA>          <NA>          <NA>
9  I 1.5 2.5 3.5  5 2.5   B22          <NA>          <NA>          <NA>

数据

df1 <- structure(list(ID = c("A", "B", "C", "D", "E", "F", "G"), V1 = 1:7, 
    V2 = c(2L, 3L, 4L, 1L, 2L, 3L, 4L), V3 = c(2L, 5L, 6L, 5L, 
    8L, 9L, 1L), V4 = c(2L, 8L, 1L, 7L, 3L, 5L, 4L), V5 = c(2L, 
    3L, 1L, 8L, 2L, 9L, 6L), Group = c("B21", "B24", "A28", "A61", 
    "A62", "C91", "D90"), Categorical_1 = c("[Text]", "[Text]", 
    "[Text]", "[Text]", "[Text]", "[Text]", "[Text]"), 
Categorical_2 = c("[Text]", 
    "[Text]", "[Text]", "[Text]", "[Text]", "[Text]", "[Text]"
    ), Categorical_3 = c("[Text]", "[Text]", "[Text]", "[Text]", 
    "[Text]", "[Text]", "[Text]")), class = "数据.frame", 
row.names = c(NA, 
-7L))

R相关问答推荐

基于shiny 应用程序中的日期范围子集xts索引

R创建一个数据透视表,计算多个组的百分比

如何 bootstrap glm回归、估计95%置信区间并绘制它?

根据R中两个变量的两个条件删除带有dspirr的行

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

次级y轴R gggplot2

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

如何直接从Fortran到R的数组大小?

当月份额减go 当月份额

R中边际效应包中Logistic回归的交互作用风险比

过滤名称以特定字符串开头的文件

根据约束随机填充向量的元素

将统计检验添加到GGPUBR中的盒图,在R

`-`是否也用于数据帧,有时使用引用调用?

为什么函数toTitleCase不能处理english(1),而toupper可以?

根据r中每行中的日期序列,使用列名序列创建新列

在ggplot2图表中通过端点连接点

是否从列中删除★符号?

R:如何在数据集中使用Apply

基于日期输入的子集数据集,其中应包括NAS作为 Select