Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:在data.frame列中循环_R_Loops_Dataframe - Fatal编程技术网

R:在data.frame列中循环

R:在data.frame列中循环,r,loops,dataframe,R,Loops,Dataframe,我得到了以下我的_数据: geneid chr acc_no start end size strand S1 S2 A1 A2 1 gene_010010 1 AC12345.1 3662 4663 1002 - 328 336 757 874 2 gene_010020 1 AC12345.1 5750 7411 1662 - 480 589 793 765 3 gene_010030 2 A

我得到了以下我的_数据:

        geneid chr     acc_no start   end size strand   S1   S2   A1   A2
1 gene_010010   1 AC12345.1  3662  4663 1002      -  328  336  757  874
2 gene_010020   1 AC12345.1  5750  7411 1662      -  480  589  793  765
3 gene_010030   2 AC12345.1  9003 11024 2022      -  653  673  875  920
4 gene_010040   2 AC12345.1 12006 12566  561      -  573  623  483  430
5 gene_010050   3 AC12345.1 15035 17032 1998      - 2256 2333 1866 1944
6 gene_010060   3 AC12345.1 18188 18937  750      -  526  642  650  586
我能够计算给定列的总和,即:

chr.sums <- data.frame(with (my_data, tapply(S1, INDEX=chr, FUN=sum)))
问题是,我想得到包含四列S1、S2、A1和A2的chr.sums,以及对应于唯一chr数的30行。我不想来回切换到Python,但在data.frame中遍历列并将输出分配给特定列让我感到困惑

编辑 上述玩具数据集。

您可以使用plyr的ddply。下面是一些代码:

plyr::ddply(my_data, .(chr), summarize, S1 = sum(S1), S2 = sum(S2), 
  A1 = sum(A1), A2 = sum(A2))
编辑。更紧凑的解决方案是:

plyr::ddply(my_data, .(chr), colwise(sum, .(S1, S2, A1, A2)))
下面是它的工作原理。首先根据chr将数据拆分为若干部分。然后,对每件物品的S1、S2、A1、A2列进行汇总。最后,将它们重新组装到单个数据帧中

任何地方都有这种拆分应用联合收割机问题,请将plyr作为解决方案。

您可以使用plyr的ddply。下面是一些代码:

plyr::ddply(my_data, .(chr), summarize, S1 = sum(S1), S2 = sum(S2), 
  A1 = sum(A1), A2 = sum(A2))
编辑。更紧凑的解决方案是:

plyr::ddply(my_data, .(chr), colwise(sum, .(S1, S2, A1, A2)))
下面是它的工作原理。首先根据chr将数据拆分为若干部分。然后,对每件物品的S1、S2、A1、A2列进行汇总。最后,将它们重新组装到单个数据帧中

任何存在这种拆分-应用-合并问题的地方,都可以将plyr作为解决方案。

tapply不会处理多个列,但聚合的公式版本会

tapply不会处理多个列,但aggregate的公式版本会处理多个列


请使用dputmy_数据并将结果粘贴到您的问题中。这意味着我们可以使用您的实际数据发布一个解决方案。@Andrie:我的_数据中有8k行,我想这对一个问题来说太多了。将第4-6行的chr编号翻转到第2行将创建一个玩具集。在这种情况下,构建一个玩具子集并发布。请使用dputmy_数据并将结果粘贴到您的问题中。这意味着我们可以使用您的实际数据发布一个解决方案。@Andrie:我的_数据中有8k行,我想这对一个问题来说太多了。将第4-6行的chr编号翻转到第2行将创建一个玩具集。在这种情况下,构建一个玩具子集并发布。我刚刚输入了colwise解决方案。+1 colwise的使用很好。更好的方法是ddplymy_数据[,-3:7],.chr,colwise,sum@Ramnath:非常感谢,它按预期工作。节省了我很多时间。“我会调查普莱尔的。”安德烈:谢谢。对于一个R新手来说,Ramnath的答案更具可读性。我刚刚输入了colwise解决方案。+1 colwise的使用很好。更好的方法是ddplymy_数据[,-3:7],.chr,colwise,sum@Ramnath:非常感谢,它按预期工作。节省了我很多时间。“我会调查普莱尔的。”安德烈:谢谢。对于一个R新手来说,Ramnath的答案更具可读性。谢谢。谢谢你。chr.sums