r - 查找与其他几列相比唯一的列中的字母,并将它们分段计数
问题描述
我有点努力在 R 上编写脚本来处理数据集以获取另一个程序的输入文件。
我有一个如下所示的数据集:
df1 <- read.table(text = "
chr pos ind0 ind1 ind2 ind3 ind4 ind5 ind6 ind7 ind8 ind9 ind10
MRVK01001299.1 972 C C T N C C T N N C C
MRVK01001299.1 973 G G G N G G G N N G G
MRVK01001299.1 997 C T T T T T T T T T T
MRVK01001299.1 999 A T T N T T T T T T T
MRVK01001299.1 1018 A C T N T C C T T T T
MRVK01001299.1 1086 A T T T T T T T T T T
MRVK01001299.1 2125 C C T N C C T N N C C
MRVK01001299.1 2456 G G G N G G G N N G G
", header = TRUE, stringsAsFactors = FALSE)
我想确定在 ind0 中唯一找到字母的位置 (pos)。
“N”不会被算作不同的字母。例如,我们将为位置 997、999 和 1086 设置一个唯一值。
然后,我想计算 ind0 有多少次在位置 (pos) 列中有 1000 个系列的私人信件。所以这将是:
0 2
1000 1
2000 0
etc
因为我们有两个位置,ind0 的唯一值介于 0 和 1000 之间,1 介于 1000 和 2000 之间,0 介于 2000 和 3000 之间。最远的值将超过 20,000,000。
我正在努力寻找在 R 上对此进行编码的解决方案。有人可以帮忙吗?
解决方案
将 ind0 的值与其他个体和子集进行比较:
res1 <- df1[ rowSums(df1$ind0 == df1[, -c(1:3)]) == 0 &
apply(df1[, -c(1:3)], 1, function(i) length(unique(i[ i != "N" ]))) == 1, ]
res1
# chr pos ind0 ind1 ind2 ind3 ind4 ind5 ind6 ind7 ind8 ind9 ind10
# 3 MRVK01001299.1 997 C T T T T T T T T T T
# 4 MRVK01001299.1 999 A T T N T T T T T T T
# 6 MRVK01001299.1 1086 A T T T T T T T T T T
然后我们可以使用table获取每个块的计数:
table(cut(res1$pos, c(0, 1000, 2000, 3000)))
# (0,1e+03] (1e+03,2e+03] (2e+03,3e+03]
# 2 1 0
推荐阅读
- jquery - 无法使 Jquery 表格单元格单击工作
- python - 在 Python 中列出元素
- angular - 订阅未定义-----Angular 6
- apache-spark - Spark 2.2 性能问题中的横向视图爆炸
- authentication - Login With Amazon (LWA) 服务是否会生成 JWT 令牌?
- kubernetes - 使用 Deployment Manager 部署区域私有 GKE 集群时出错
- scala - 通用高级类型
- javascript - AngularJS Ng-Repeat 仅在子子行上
- python - Django 请求会话无法读取 django-session 表
- c# - 运行 Ranorex/Neoload 测试时未找到 [ProtocolSAPGUI] 的属性或关联