忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1621 | 回复: 4

用perl实现不同组别数据的提取 [复制链接]

论坛徽章:
0
发表于 2017-07-23 22:45 |显示全部楼层
原始数据如图所示目的:想把不同的组别中的数据分别提取出来(分成A/B/C三组),并计算每组中的每个变量(var1-var10)的平均值
结果输出如图
请各位大神指教



最终输出

最终输出

原始数据

原始数据

论坛徽章:
0
发表于 2017-08-05 13:37 |显示全部楼层
各位怎么都不回答呢?
还是贴一个大神的代码吧!
  1. #!/usr/bin/perl
  2. use strict;

  3. @ARGV != 1 || die "require 2 parameters";
  4. my ($groupfile, $relafile) = @ARGV;
  5. my(@temp1, %group, $toptable, @names, @data, @array);
  6. open GROUP, "<", $groupfile;

  7. while(<GROUP>){
  8.     chomp;
  9.     @temp1 = split "\t"; $_;
  10.     $group{$temp1[0]} = $temp1[1];
  11.     push @array, $temp1[1];       
  12. }
  13. print "id" . "\t";
  14. foreach my $i (0..$#array){
  15.     print  $array[$i] . "_ave" . "\t" . $array[$i] . "_std\t" if $array[$i] ne $array[$i+1];
  16.    next;
  17.         }
  18. print "\n";

  19. open IN, "<", $relafile;
  20. chomp ($toptable = <IN>);
  21. @names = split "\t", $toptable;

  22. while(<IN>){
  23.     chomp;
  24.     @data = split "\t";
  25.     my %hash1;
  26.     foreach my $index (1..$#data) {
  27.         my $key = $group{$names[$index]};
  28.         if ($hash1{$key}){
  29.             push @{$hash1{$key}}, $data[$index];
  30.         }else {
  31.             $hash1{$key} = [$data[$index]];
  32.         }
  33.     }
  34.     print $data[0] . "\t";
  35.     foreach my $elen ( sort keys %hash1) {
  36.         print average(@{$hash1{$elen}}) . "\t" . std(@{$hash1{$elen}}) . "\t";
  37.     }
  38.     print "\n"
复制代码


论坛徽章:
0
发表于 2017-08-07 17:02 |显示全部楼层
这个excel不到一分钟就搞定了,为啥要麻烦写个脚本

论坛徽章:
0
发表于 2017-08-07 20:45 |显示全部楼层
回复 3# hxswdl

问得好,,作为生信人,这个问题我竟一时不知如何回答

论坛徽章:
0
发表于 2017-08-07 23:08 |显示全部楼层
这种问题用R来写的话10行内搞定

  1. library(reshape2)
  2. library(dplyr)

  3. data <- read.csv("in.csv")
  4. data_melt <- melt(data)
  5. data_melt$series <- substr(as.character(data_melt$variable), 1, 1)
  6. data_mean <- data_melt %>% group_by(id, series) %>% summarise_at("value", mean)
  7. data_rslt <- dcast(data_mean, id ~ series)
  8. write.csv(data_rslt, "out.csv")
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10张SACC2017门票等你来拿~

在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧 +” 的概念正在深入到各行各业,提升企业效率,释放商业潜能,创造全新机遇。作为国内顶级技术盛会之一,2017 中国系统架构师大会(SACC2017)将于 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。今年,大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年10月19日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP