Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在覆盖图中转换轨迹中的距离_R_Bash_Awk - Fatal编程技术网

R 在覆盖图中转换轨迹中的距离

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

我有一条一定距离的赛道。我还有一个轨迹中距离的坐标文件。现在我想知道坐标文件覆盖了轨迹中的每个位置多少次

例如,为简单起见,“我的轨迹”的长度为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   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