删除重复行并计算 R 中数据帧的平均值

2024-05-02


我提供了一个我正在处理 >1,000 列和 >200 行的大型数据框的小示例。我想让每列的每个重复行成为单行而不是两行,同时取与第 1 列相关的每个值的平均值(平均值的列是第 6-8 列等) 。


Col1    Col2    Col3    Col4    Col5    Col6        Col7        Col8        Col9        Col10
A-001   7       40      1       J       3.985645    4.231623    2.36987     9.36545852  8.369663
A-001   7       40      1       J       1.458798    7.652123    1.236985    4.236987    1.22556633
B-002   8       50      0       K       5.00212     8.369562    7.4569852   5.36692     4.6632121
B-002   8       50      0       K       9.02336     1.2120145   3.0014588   8.214569    5.2223698
C-003   10      60      1       L       1.451203    5.321455    8.25963     2.03369878  4.3336988
C-003   10      60      1       L       1.65653     2.369898    8.2136999   7.21458777  5.3366
D-004   3       70      0       M       5.323211    1.147852    7.20014     5.36989     2.36555
D-004   3       70      0       M       4.36969     5.231478    4.23698     3.645478    9.214563
E-005   4       80      1       N       8.123256    9.2356478   5.3696      4.698889    7.366695
E-005   4       80      1       N       7.9632145   0.004555    1.24789     7.3696969   1.23655

预期输出:

col 1   col 2   col 3   col 4   col 5     col 6
A-001       7      40       1       J   2.49282
B-002       8      50       0       K   7.01274
C-003      10      60       1       L   1.55387
D-004       3      70       0       M   4.84645
E-005       4      80       1       N   8.04324

对于没有采用正确的格式,我提前表示歉意 预计感谢您提前提供的任何帮助

dd <- structure(list(col1 = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
4L, 5L, 5L), .Label = c("A-001", "B-002", "C-003", "D-004", "E-005"
), class = "factor"), col2 = structure(c(1L, 1L, 2L, 2L, 3L, 
3L, 4L, 4L, 5L, 5L), .Label = c("7", "8", "10", "3", "4"), class = "factor"), 
    col3 = c(40L, 40L, 50L, 50L, 60L, 60L, 70L, 70L, 80L, 80L
    ), col4 = c(1, 1, 0, 0, 1, 1, 0, 0, 1, 1), col5 = c(JL, JL, KL, KL, LL, LL, ML, ML, NL, 
    NL), col6 = c(3.985645, 1.458798, 5.00212, 9.02336, 1.451203, 1.65653, 5.323211,  
    4.36969, 8.123256, 7.9632145), col7 = c(4.231623, 7.652123, 8.369562, 1.2120145,  
    5.321455, 2.369898, 1.147852, 5.231478, 9.2356478, 0.004555), col8 = c(2.36987,  
    1.236985, 7.4569852, 3.0014588, 8.25963, 8.2136999, 7.20014, 4.23698, 5.3696,  
    1.24789), col9 = c(9.36545852, 4.236987, 5.36692, 8.214569, 2.03369878, 7.21458777,  
    5.36989, 3.645478, 4.698889, 7.3696969), col10 = c(8.369663, 1.22556633, 4.6632121,  
    5.2223698, 4.3336988, 5.3366, 2.36555, 9.214563, 7.366695, 1.23655)), .Names =  
    c("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10"),  
    class = "data.frame", row.names = c(NA, -10L))

这使用dplyr这对于大数据来说会很快。第一部分提取未聚合的唯一列,第二部分进行聚合(通过 col1 组表示)。然后将两个部分绑定在一起(bind_cols)。我重命名了您的列以删除空格,如果您留下空格,则需要使用带有名称的反引号(即“col 1”)

library(dplyr)
cols <- 6:10  # columns to average
bind_cols(
    dat %>% distinct(col1) %>% .[,-cols],  # pull out columns we aren't aggregating
    dat[,c(1, cols)] %>% group_by(col1) %>%
        summarise_each(funs(mean)) %>% .[,-1]  # aggregate other columns
)

#    col1 col2 col3 col4 col5      col6       col7      col8      col9      col10
# 1 A-001    7   40    1    J   2.49282    5.94187   1.80343   6.80122    4.79762
# 2 B-002    8   50    0    K   7.01274    4.79079   5.22922   6.79075    4.94279
# 3 C-003   10   60    1    L   1.55387    3.84568   8.23667   4.62414    4.83515
# 4 D-004    3   70    0    M   4.84645    3.18967   5.71856   4.50768    5.79006
# 5 E-005    4   80    1    N   8.04324    4.62010   3.30875   6.03429    4.30162

Edit

这太复杂了,感谢@StevenBeaupré,简单的版本是(*_each 函数当然可以删除列!)

dat %>% group_by(col1) %>% mutate_each(funs(mean), -(1:5)) %>% distinct
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除重复行并计算 R 中数据帧的平均值 的相关文章

  • Django 中的 Rpy2 错误 - 未为“”类型的对象定义转换“py2rpy”

    我以前从未使用过 R 并且正在尝试使用 rpy2 从 python 调用 R 函数 它可以在独立的 python 终端上运行 但不能在 Django 中运行 但rpy2似乎无法将python字符串转换为r对象 我正在使用同事提供的自定义库
  • 回归时如何设置系数值;右

    我正在寻找一种指定预测变量值的方法 当我使用当前数据运行 glm 时 其中一个变量的系数接近 1 我想将其设置为 0 8 我知道这会给我一个较低的 R 2 值 但我先验地知道模型的预测能力会更大 glm 的权重组件看起来很有希望 但我还没有
  • stat_function 从函数生成平线

    我有以下代码 library ggplot2 f lt function x if x gt 2 1 x 0 3 else 0 graph lt ggplot data frame x c 0 10 aes x graph lt graph
  • 将不同的 grViz 组合成一个图

    我想结合不同的DiagrammeR绘制成一个图形 生成的图如下例所示 library DiagrammeR pDia lt grViz digraph boxes and circles a graph statement graph ov
  • 在函数中使用 quit/q 会导致 RStudio 出现致命错误

    更多的是好奇 但当你使用时q or quit在 R studio 内的函数内部 它会导致致命错误 如下所示 但 rgui 中的相同函数会导致 R 像往常一样停止 并且仅使用q 在 RStudio 中按预期关闭 R 为什么q在函数中导致 RS
  • 如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL Server 表?

    我在SQL Server中创建了一个表 如下所示 CREATE TABLE testPK ID INT NOT NULL IDENTITY 1 1 PRIMARY KEY NumVal NUMERIC 18 4 现在我想使用 RODBC 函
  • 改进R中从google获取股票新闻数据的功能

    我已经编写了一个函数来从 Google 获取和解析给定股票代码的新闻数据 但我确信有一些方法可以改进它 对于初学者来说 我的函数返回一个 GMT 时区的对象 而不是用户当前的时区 如果传递的数字大于 299 它就会失败 可能是因为 goog
  • 在`rmarkdown`中,如何在句子中添加图标?

    In rmarkdown 如何在句子中添加图标 例如如下 如何添加markdown icon单词 Markdown 和 is 之间 有一个很好的 R 包 可以轻松下载 RMarkdown 文档并将图标添加到其中 icons https gi
  • 如何使用autoconf重新生成配置文件?

    我使用 autoconf 重新生成配置文件 它有效 但是当我执行生成的配置文件时 configure 有一些错误消息 例如 configure line 3713 syntax error near unexpected token bla
  • 根据 row_number() 过滤 data.frame

    更新 自从提出这个问题以来 dplyr 已经更新 现在按照 OP 的要求执行 我正在尝试获取第二行到第七行data frame using dplyr 我正在这样做 require dplyr df lt data frame id 1 1
  • 空间数据xyz到矩阵

    我有一个大数据框 100 000 行 其中包含 LON LAT VALUE 我想将其转换为矩阵 EPSG 中的坐标 3035 我使用以下命令尝试了 reshape2 包 acast df lon lat value var value 效果
  • 通过 Shiny 中的串扰将 Plotly 与 DT 结合使用

    我正在编写一个应用程序来将 csv 文件读取为闪亮的并将散点图与 DT 表链接起来 我几乎遵循了 Plotly 网站上 DT 数据表上的示例 https plot ly r datatable https plot ly r datatab
  • 如何确定 R 包的作者?

    如何确定包的作者是谁 鉴于我们拥有这个广泛使用的代码库 我认为参考我在分析中使用的软件是合适的 有没有办法以编程方式检索作者和任何其他相关信息 在伪代码中 我想执行以下操作 references base 我怎样才能做到这一点 为了能够引用
  • 如何返回包含最大值标签的向量

    我有一个 4 列数组 我想获得一个向量 其中每行包含包含该行最大值的列的标签 我可以在循环中执行此操作 但我想使用矩阵函数来提高速度 我怎样才能在不编写自己的库函数的情况下做到这一点 有一个函数可以做到这一点 如果x是你的矩阵 尝试max
  • R 中的龙卷风图

    我正在尝试在 R 中绘制龙卷风图 又名敏感性图 目标是可视化某些变量增加 10 和减少 10 的效果 到目前为止我已经得到这个结果 这是我正在使用的代码 Tornado plot data lt matrix c 0 02 0 02 0 0
  • 使用 RDCOMClient 搜索 Outlook 收件箱

    我尝试使用 RDCOMClient 在 Outlook 收件箱中搜索电子邮件中的特定主题 然后获取附件 我在一封电子邮件上进行了这项工作 但由于主题包含日期元素 我需要搜索成为一个类似的子句 但不太清楚这适合我的下面的查询 outlook
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • RStudio 如何确定控制台宽度,为什么它似乎总是出错?

    我刚刚发现wid lt options width在 RStudio 中 它似乎是我日常控制台使用中令人烦恼的根源 或者更确切地说 更接近根源 我应该先说一下 我目前使用的是 R 3 2 2 RStudio 0 99 491 Linux M

随机推荐