r - 如何对 R 数据表的所有行中的值使用条件
问题描述
我认为,我一直在努力解决 R 中的一项基本任务,但我在这方面还是新手,并且无法通过我找到的论坛实现这一目标。
这是我的数据集:
Read SNP.mapped DEL.mapped INS.mapped SNP.true DEL.true INS.true Method Population 1: 0 0 0 0 0 0 0 E_B1 E 2: 1 0 0 0 0 0 0 E_B1 E 3: 100 0 0 0 0 0 0 E_B1 E 4: 1000 0 0 0 0 0 0 E_B1 E 5: 100B 0 0 0 0 0 0 E_B1 E ... 30657866: ZZ2 0 0 0 0 0 0 C_N9 C 30657867: ZZI 0 0 0 0 0 0 C_N9 C 30657868: ZZO 0 0 0 1 0 0 C_N9 C 30657869: ZZV 0 0 0 0 0 0 C_N9 C 30657870: ZZZ 0 0 0 0 0 0 C_N9 C
这是我想要在名为“all.dataSNP0”的数据表上的第一行实现的示例:
length(unique(all.dataSNP0$Read[which(all.dataSNP0$Population =="C" & all.dataSNP0$Method =="C_B1")])) / length(unique(all.dataSNP0$Read[which(all.dataSNP0$Population=="C")]))
结果是我所期望的,并且工作得很好。但是现在我试图将此行应用于所有列,但我不知道如何在循环遍历它时在条件中使用列的实际值。我试图这样做:
all.dataSNP0[, Ratio:=sapply(length(unique(all.dataSNP0$Read[which(Population == .Population & Method == .Method)])) / length(unique(all.dataSNP0$Read[which(Population== .Population)])), "[",1)]
但这似乎不起作用。我确实认为我一定不会太远但找不到它,
谢谢
埃迪
解决方案
您可以使用uniqueN
计算唯一值的数量,我们可以对中的每个唯一值进行计算Population
,Method
然后计算每个值的比率Population
。
library(data.table)
all.dataSNP0[, count := uniqueN(Read), .(Population, Method)]
all.dataSNP0[, count := count/sum(count), Population]
可以使用相同的方法dplyr
:
library(dplyr)
all.dataSNP0 %>%
group_by(Population, Method) %>%
mutate(count = n_distinct(Read)) %>%
group_by(Population) %>%
mutate(count = count/sum(count))
推荐阅读
- vespa - vespa 安装有什么变化吗?
- ios - 在swiftUI中捕获onLongPressGesture的touchDown位置?
- go - golang 中的 defer mutex.Unlock() 有时从未调用过
- azure-eventgrid - 事件网格 webhook 握手验证失败
- mysql - MySQL:左连接、连接或求和、未重复的行
- c - 在 C 循环中重复在堆栈上创建缓冲区是不好的做法吗?
- struct - rust - 如何使用派生宏来解析结构的元信息?
- ansible - 找不到 aci_tenant 的导入模块支持代码
- javascript - 如何增加javascript画布中的FPS?我使用 DrawImage 在屏幕上绘制 2000 个纹理,它们使用 2 个图集纹理
- javascript - 如何在 NodeJS 中使用相对路径(参数)获取文件