我在这里发现了类似的问题: Count the number of words in a string in R? 和这里 Faster way to split a string and count characters using R? 但我不能在我的例子中工作。 我有一个很大的数据帧。其中一列具有要素的基因组位置,条目格式如下:
[hg19:2:224840068-224840089:-]
[hg19:17:37092945-37092969:-]
[hg19:20:3904018-3904040:+]
[hg19:16:67000244-67000248,67000628-67000647:+]
我将这些元素分解为各个元素以获得以下内容(即,第一个条目):
hg19 2 224840068 224840089 -
但是在第四个条目的情况下,我想把它放到两个单独的位置。 即
hg19:16:67000244-67000248,67000628-67000647:+]
变为
hg19 16 67000244 67000248 +
hg19 16 67000628 67000647 +
(相邻列中的所有关联数据都填写在原始文件中)
我可以通过简单的方法识别哪些行需要此操作,只需使用逗号','计算行,因为它们不会出现在任何其他列的任何其他文本中,除非有多个基因组位置用于特征。 但是我在第一个障碍时失败了,因为sapply命令错误地为每个条目返回“1”。
testdat$multiple <- sapply(gregexpr(",", testdat$genome_coordinates), length)
(或)
testdat$multiple <- sapply(gregexpr("\\,", testdat$genome_coordinates), length)
table(testdat$multiple)
1
4
使用我上面发布的示例,我希望输出为
testdat$multiple
0
0
0
1
实际上在做
grep -c
在命令行中的相同数据上显示我有10个条目包含','。
使用我上面发布的示例,我希望输出为
所以最初我想让这个工作,但我也有点难以想到如何提取两个(或更多)位置并将它们放在自己的行上,填写相邻的数据。 实际上我打算坚持使用我知道的东西(在命令行上)用','out来重写行,复制文件并拆分和awk选择的列(相应文件中的第一个和第二个位置)然后cat and sort他们。如果我在R中有一个更快的方式,那么我会喜欢指针。
答案 0 :(得分:0)
gregexpr
会返回长度为1的对象。如果要查找匹配的行与不匹配的行,则需要查看返回的值< / em>,而不是长度。匹配失败返回-1
尝试使用foo<-sapply(testdat$genome, function(x) gregexpr(',',x)); as.logical(foo)
获取带逗号的行。