R 在覆盖图中转换轨迹中的距离
我有一条一定距离的赛道。我还有一个轨迹中距离的坐标文件。现在我想知道坐标文件覆盖了轨迹中的每个位置多少次 例如,为简单起见,“我的轨迹”的长度为10,“我的坐标文件”具有以下事件:R 在覆盖图中转换轨迹中的距离,r,bash,awk,R,Bash,Awk,我有一条一定距离的赛道。我还有一个轨迹中距离的坐标文件。现在我想知道坐标文件覆盖了轨迹中的每个位置多少次 例如,为简单起见,“我的轨迹”的长度为10,“我的坐标文件”具有以下事件: ID START END AMOUNT 1 2 4 1 2 3 7 2 3 3 4 1 4 4 10 1 这里我们看到4个事件,第二个事件发生了两次,因此需要计算两次。输出应为: POS COV 2 1 3 4 4 5 5 3 6 3 7
ID START END AMOUNT
1 2 4 1
2 3 7 2
3 3 4 1
4 4 10 1
这里我们看到4个事件,第二个事件发生了两次,因此需要计算两次。输出应为:
POS COV
2 1
3 4
4 5
5 3
6 3
7 3
8 1
9 1
10 1
这是疯狂的具体为我的目的,但我觉得解决办法是死简单,我没有谷歌搜索这个正确的
谢谢。这是一个通过base R使用
mapply
的解决方案
as.data.frame(table(unlist(rep(mapply(`:`, df$START, df$END), df$AMOUNT))))
这就给了,
分解上述内容:
:在mapply(`:`,df$START,df$END)
和开始
停止
:按rep(mapply(`:`,df$START,df$END),df$AMOUNT))
次数复制每个序列AMOUNT
:创建频率表表(未列出(rep(mappy(`:`,df$START,df$END,df$AMOUNT)))
:将其包装到数据帧中(表as.data.frame
的原始输出是命名向量)
$cat文件
ID起止金额
1 2 4 1
2 3 7 2
3 3 4 1
4 4 10 1
$cat cov.awk
NR>1{用于(i=1;我能告诉我们需要通过哪些列来计算距离吗?我一定是遗漏了什么,我没有得到你的输出,因为你没有标题,因此NR>1
跳过了第一行数据。我应该按我的方式显示数据。我现在要补充一下。哦,太傻了。谢谢你的澄清,我会的rks现在很棒!非常优雅的解决方案!
Var1 Freq
1 2 1
2 3 4
3 4 5
4 5 3
5 6 3
6 7 3
7 8 1
8 9 1
9 10 1
$ cat file
ID START END AMOUNT
1 2 4 1
2 3 7 2
3 3 4 1
4 4 10 1
$ cat cov.awk
NR > 1 {for (i=1; i<=$4; ++i)
for (j=$2; j<=$3; ++j) cov[j] += 1}
END {for (i=1; i<=len; ++i)
if (i in cov) print i, cov[i]}
$ awk -v len=10 -f cov.awk file
2 1
3 4
4 5
5 3
6 3
7 3
8 1
9 1
10 1