我有以下数据
ABCB9
rs11057374
rs7138100
rs11057375
rs12309481
END
ABCC10
rs1214748
END
ABCC2
rs928578
rs10883039
END
ABCC4
rs12428035
rs9561933
rs9302086
rs3848077
rs3099362
END
通过使用这些数据,我想使输出如下
rs11057374 ABCB9
rs7138100 ABCB9
rs11057375 ABCB9
rs12309481 ABCB9
rs1214748 ABCC10
rs928578 ABCC2
rs10883039 ABCC2
rs12428035 ABCC4
rs9561933 ABCC4
rs9302086 ABCC4
rs3848077 ABCC4
rs3099362 ABCC4
没有必要是否有空白和" END"
如何在R或linux中输出此输出?
答案 0 :(得分:0)
我们用readLines
读取数据集,删除任何尾随/前导空格(trimws
),删除空白(""
)或“END”的元素,创建分组索引('i1')基于'rs'作为字符串中的起始字符的出现(基于提供的示例),基于'i1'('nm1'),{{1}提取'lines2'的第一个元素}'lines2'由'i1'设置,split
元素的名称设置为'nm1',删除list
的每个元素中的第一个观察点,并list
将其转换为stack
。
data.frame
lines1 <- trimws(lines)
lines2 <- lines1[!lines1 %in% c("END", "")]
i1 <- cumsum(!grepl("^rs", lines2))
nm1 <- lines2[ave(i1,i1, FUN=seq_along)==1]
stack(setNames(lapply(split(lines2, i1), `[`, -1), nm1))
# values ind
#1 rs11057374 ABCB9
#2 rs7138100 ABCB9
#3 rs11057375 ABCB9
#4 rs12309481 ABCB9
#5 rs1214748 ABCC10
#6 rs928578 ABCC2
#7 rs10883039 ABCC2
#8 rs12428035 ABCC4
#9 rs9561933 ABCC4
#10 rs9302086 ABCC4
#11 rs3848077 ABCC4
#12 rs3099362 ABCC4