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