分两步计算列表中的元素

用户名

我有一个由data.frames组成的列表:

> list1
$HSP90AB1
         lineNum count
HSP90AB1       1     1
INMT           2     0
CKB            3     0
NR2E1          4     1
ME3            5     0
FAM162A        6     0
KIRREL2        7     0

$INMT
         lineNum count
HSP90AB1       1     1
INMT           2     0
CKB            3     0
NR2E1          4     0
ME3            5     0
FAM162A        6     0
KIRREL2        7     1

$CKB
         lineNum count
HSP90AB1       1     1
INMT           2     0
CKB            3     0
NR2E1          4     0
ME3            5     1
FAM162A        6     0
KIRREL2        7     0

$NR2E1
         lineNum count
HSP90AB1       1     0
INMT           2     0
CKB            3     0
NR2E1          4     0
ME3            5     0
FAM162A        6     0
KIRREL2        7     0

$ME3
             lineNum count
HSP90AB1       1     0
INMT           2     1
CKB            3     0
NR2E1          4     0
ME3            5     0
FAM162A        6     0
KIRREL2        7     0

$FAM162A
         lineNum count
HSP90AB1       1     1
INMT           2     0
CKB            3     0
NR2E1          4     0
ME3            5     0
FAM162A        6     0
KIRREL2        7     0

$KIRREL2
         lineNum count
HSP90AB1       1     0
INMT           2     0
CKB            3     0
NR2E1          4     0
ME3            5     0
FAM162A        6     0
KIRREL2        7     0

我想获得以下结果:首先,对列表中每个元素1的列中count的总和进行累加,然后1对元素的其余元素中该元素的名称具有a的次数求和。例如list1[[2]]($ INMT)的列表,第一步将是:2(1count列中有两个),第二步将是:1(中有一个1对应INMT$ME3)。列表的一部分通过使用指出了我的意思,Reduce但是如果我这样做:

Reduce('+', list1)
             lineNum count
HSP90AB1       7     4
INMT          14     1
CKB           21     0
NR2E1         28     1
ME3           35     1
FAM162A       42     0
KIRREL2       49     1

我只从寻找的东西中得到第二步,有什么想法吗?

谢谢

PS还有一个重要的问题要解决,第一步只应计算与名称不匹配的元素,在我的示例中,第一步中仅对$HSP90AB1list1[[1]])进行1对应,NR2E1因为另一个1对应于HSP90AB1哪个匹配的名称list1[[1]]

所需的输出如下:

HSP90AB1       4     
INMT           3     
CKB            2    
NR2E1          1     
ME3            2       
FAM162A        1      
KIRREL2        1

这是dput(list1)

structure(list(HSP90AB1 = structure(list(lineNum = 1:7, count = c(1L, 0L, 0L, 1L, 0L, 0L, 0L)),
.Names = c("lineNum", "count"), row.names = c("HSP90AB1","INMT", "CKB", "NR2E1", "ME3","FAM162A", "KIRREL2"), class = "data.frame"), 
INMT = structure(list(lineNum = 1:7, count = c(1L, 0L, 0L, 
0L, 0L, 0L, 1L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame"), 
CKB = structure(list(lineNum = 1:7, count = c(1L, 0L, 0L, 
0L, 1L, 0L, 0L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame"), 
NR2E1 = structure(list(lineNum = 1:7, count = c(0L, 0L, 0L, 
0L, 0L, 0L, 0L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame"), 
ME3 = structure(list(lineNum = 1:7, count = c(0L, 1L, 0L, 
0L, 0L, 0L, 0L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame"), 
FAM162A = structure(list(lineNum = 1:7, count = c(1L, 0L, 
0L, 0L, 0L, 0L, 0L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame"), 
KIRREL2 = structure(list(lineNum = 1:7, count = c(0L, 0L, 
0L, 0L, 0L, 0L, 0L)), .Names = c("lineNum", "count"), row.names = c("HSP90AB1", 
"INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"), class = "data.frame")), .Names = c("HSP90AB1", "INMT", "CKB", "NR2E1", "ME3", "FAM162A", "KIRREL2"))

这应该做。重要的步骤是通过将每个列表元素的不需要项归零来修改列表:

list2 <- Map(function(x, exclude) {x[exclude, "count"] <- 0; x},
             list1, names(list1))

然后,您可以执行以下操作:

count1 <- sapply(list2, with, sum(count))
count2 <- Reduce(`+`, list2)$count

count1 + count2
# HSP90AB1     INMT      CKB    NR2E1      ME3  FAM162A  KIRREL2 
#        4        3        2        1        2        1        1 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分两步计算列表中的元素

来自分类Dev

分两步在 ipython notebook 中绘图

来自分类Dev

两步两步验证

来自分类Dev

了解APL中的DOMAIN ERROR:分两步复制/粘贴结果

来自分类Dev

分两步在字符串中使用.format()

来自分类Dev

分两步深入,在Highcharts中进行多项选择

来自分类Dev

在CLI中禁用gitlab两步验证

来自分类Dev

两步函数的交集

来自分类Dev

两步过滤,熊猫

来自分类Dev

两步式集群

来自分类Dev

我不能@Spy对象黄瓜春天开机测试分两步定义

来自分类Dev

蓝牙服务无法正常重启:需要分两步完成

来自分类Dev

与TFS的两步分支重新集成

来自分类Dev

使用imagemagick的两步水印应用

来自分类Dev

两步文件重命名

来自分类Dev

jQuery 两步登录脚本

来自分类Dev

总结两步为一步

来自分类Dev

两步验证-确保在以后的会话中仍对用户进行身份验证

来自分类Dev

如何在Spotify登录中处理Facebook的两步身份验证?

来自分类Dev

如何在Empathy中通过两步验证添加Gmail帐户?

来自分类Dev

突出显示 R 中两步数据(源自直方图)之间的差异

来自分类Dev

计算列表中乌龟的步数-python

来自分类Dev

如何分两步进行cp

来自分类Dev

计算两个列表中匹配元素的数量

来自分类Dev

计算列表中的元素

来自分类Dev

setup.icloud.com两步验证

来自分类Dev

Swisscom Passeport使用Cloud Foundry CLI两步登录

来自分类Dev

两步破坏对象背后的原因是什么?

来自分类Dev

两步施工。有用或只是代码气味?