从包含组的文件中获取每个第n行,并且在列中给出n

dee*_*fan 5 python bash shell awk r

我在这里这里看到如何返回每一行; 但我的问题不同.文件中的单独列提供有关要返回的第n个元素的详细信息; 根据小组不同而不同.以下是数据集的示例,其中Nth列提供要返回的行.也就是说,对于Ida每3行和Idb每4个一排.数据相当大,有几个Id小组.

Id  TagNo   Nth
a   A-A-3   3
a   A-A-1   3
a   A-A-5   3
a   A-A-2   3
a   AX-45   3
a   AX-33   3
b   B-B-5   4
b   B-B-4   4
b   B-B-3   4
b   BX-B2   4 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Id  TagNo   Nth
 a  A-A-3   3
 a  A-A-2   3
 b  B-B-5   4
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

编辑:请注意我想从first每个第n项开始挑选; 这是第3 a和第4 b.对于组a,它将1st,4th, 7th...对于组b,它将是1st,5th, 9th行.原始输出有错误并且已完成编辑.真诚的道歉.

anu*_*ava 6

awk应该工作:

awk '!a[$1]++{print; if(NR>1) n=NR+$3} NR==n{print; n=NR+$3}' file

Id  TagNo   Nth
a   A-A-3   3
a   A-A-2   3
b   B-B-5   4
Run Code Online (Sandbox Code Playgroud)


LAP*_*LAP 3

基本R解决方案:

do.call(rbind, lapply(split(df, df$Id), function(x) x[seq(from = 1, to = nrow(x), by = unique(x$Nth)), ]))

    Id TagNo Nth
a.1  a A-A-3   3
a.4  a A-A-2   3
b    b B-B-5   4
Run Code Online (Sandbox Code Playgroud)