跨列表取平均值

2023-12-23

我在 R 中有这个列表(我只能访问该列表 - 而不是 d1、d2、d3、d4...我只是将这些包含在内以使这个 stackoverflow 问题可重现):

d1 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d2 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d3 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)
d4 = data.frame(v1 = rnorm(20,20,20), c2 = rnorm(20,20,20), id = 1:20)

my_list = list(d1,d2, d3, d4)

我想创建一个新的数据框(20行,2列),其中包含每个id的v1和c2的平均值。我尝试了这段代码:

final_data = data.frame(mean_v1 =  mean(my_list[[1]][1] + my_list[[2]][1] + my_list[[3]][1] + my_list[[4]][1]), mean_c2 =  mean(my_list[[1]][2] + my_list[[2]][2] + my_list[[3]][2] + my_list[[4]][2]))

但这给了我一条警告消息和一个空结果:

Warning messages:
1: In mean.default(my_list[[1]][1] + my_list[[2]][1] + my_list[[3]][1],  :
  argument is not numeric or logical: returning NA
2: In mean.default(my_list[[1]][2] + my_list[[2]][2] + my_list[[3]][2],  :
  argument is not numeric or logical: returning NA
> final_data
  mean_v1 mean_c2
1      NA      NA
  • 有没有更好的方法来完成这个工作,并且不需要手动编写my_list[]一次又一次?

最后,这看起来像这样:

       mean_v1     mean_c2 id
1   37.1730736  49.3012881  1
2   -0.7861481  -9.5201620  2
3   47.2629669  -4.0249373  3
4  -25.4266542  16.6597656  4
5   18.1102329  15.0924825  5
6   -7.7148600  21.0085447  6
7   37.2753666  21.7701739  7
8   53.5393623   0.2115059  8
9   12.2578949 -11.6501821  9
10  18.3532267  44.0709866 10
11  -0.7528975  15.0990824 11
12  12.8841962  25.8737362 12
13  43.1026041  16.5399091 13
14  -1.6249458  39.6677542 14
15  23.4145601  33.0496240 15
16  -6.8168808   7.8944851 16
17 -18.8746847  16.3386228 17
18  32.8151604  14.7895162 18
19  -0.3587592  -3.2358145 19
20  11.7361017  -3.5663637 20

谢谢你!


我们可以绑定list元素,然后进行分组mean

library(dplyr)
bind_rows(my_list) %>% 
  group_by(id) %>%
  summarise(across(everything(), mean, na.rm = TRUE), .groups = 'drop')

Or with base R using aggregate and rbind

aggregate(.~ id, do.call(rbind, my_list), mean)

关于OP帖子中的问题,只是这样mean需要一个向量作为输入,而OP的代码返回一个data.frame有一列

> str(my_list[[1]][1])
'data.frame':   20 obs. of  1 variable:
 $ v1: num  -19.1 10.7 -1.8 26.4 28.8 ...
> str(my_list[[1]][[1]])
 num [1:20] -19.1 10.7 -1.8 26.4 28.8 ...

因此mean回报NA

mean(my_list[[1]][1])
[1] NA
Warning message:
In mean.default(my_list[[1]][1]) :
  argument is not numeric or logical: returning NA

相反,它应该是

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

跨列表取平均值 的相关文章

  • PYTHON 从嵌套列表中删除元素

    我有一个像这样的数组 dataSet 387230 296163 323434 311472 323412 166282 410119 我想删除元素 311472 但不知道如何删除 我努力了 for set in dataSet for i
  • 从 data.frame 在 ggplot 图例中添加信息

    我想在图例中添加信息 哪个传感器具有该值 这是我的代码 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor 7 sensor 8
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • dplyr:连接中的 NSE (by)

    我很难弄清楚如何使用 dplyr left join 和 NSE 连接两个表 问题是我无法为 by 提供正确的值 我想我现在已经找到了解决方案 但感觉我正在以一种额外复杂的方式来做 因此 如果您知道更简单 更优雅的解决方案 请告诉我 这就是
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • case_when 与部分字符串匹配和 contains()

    我正在使用一个数据集 其中有许多名为 status1 status2 等的列 在这些列中 它表示某人是否豁免 完整 注册等 不幸的是 豁免投入并不一致 这是一个示例 library dplyr problem lt tibble perso
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 如何像在facet_grid中一样在facet_wrap中定位条带标签

    我想在使用时删除多余的条带标签facet wrap 并用两个变量进行分面 并且都是自由尺度的 例如 这个facet wrap下图的版本 library ggplot2 dt lt txhousing txhousing year in 20
  • rvest 函数 html_nodes 返回 {xml_nodeset (0)}

    我正在尝试抓取以下网站的数据框 http stats nba com game 0041700404 playbyplay http stats nba com game 0041700404 playbyplay 我想创建一个表格 其中包
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 在 Google Colab 上的 R 笔记本中安装 python 库

    我正在尝试在 Google Colab 上的 R 笔记本中安装 python 库 为此我使用 reticulate 包 library reticulate py install pandas 但我得到的结果是这个错误 Error coul
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 将整个包传递给雪簇

    我正在尝试并行化 使用snow parLapply 一些依赖于包 即除snow 调用函数中引用的对象parLapply必须使用显式传递给集群clusterExport 有没有办法将整个包传递到集群 而不必显式命名每个函数 包括用户函数调用的
  • 安装 2.15 后 ggplot2 中的 alpha 通道不起作用

    更新到 R 2 15 后 ggplot 中的 alpha 通道似乎不再起作用 plot rnorm 100 rnorm 100 bg cc000055 pch 21 工作得很好但是 qplot rnorm 100 rnorm 100 col
  • 使用“assign()”为列表项分配值

    首先了解一些背景 我写了一个中缀函数 本质上取代了这个习惯用法 x length x 1 lt y 或者简单地说x lt append x y 对于向量 这里是 lt function x y xcall lt substitute x x
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x
  • 斯皮尔曼相关性和联系

    我正在一小组配对排名上计算斯皮尔曼的 rho 斯皮尔曼因处理领带不当而闻名 例如 取2组8个排名 即使两组中有6个是平局 相关性仍然很高 gt cor test c 1 2 3 4 5 6 7 8 c 0 0 0 0 0 0 7 8 met
  • 如何在R中实现countifs函数(excel)

    我有一个包含 100000 行数据的数据集 我尝试做一些countifExcel 中的操作 但速度慢得惊人 所以我想知道R中是否可以完成这种操作 基本上 我想根据多个条件进行计数 例如 我可以指望职业和性别 row sex occupati

随机推荐