0

我在这里发现了与此类似的问题: Count the number of words in a string in R? 在这里 使用 R 更快地分割字符串和计数字符的方法? 但我无法在我的示例中工作。我有一个相当大的数据框。其中一列具有特征的基因组位置,并且条目的格式如下:

[hg19:2:224840068-224840089:-]
[hg19:17:37092945-37092969:-] 
[hg19:20:3904018-3904040:+]
[hg19:16:67000244-67000248,67000628-67000647:+]

我将这些元素拆分为单独的元素以获得以下内容(即,第一个条目):

hg19    2   224840068   224840089   -

但在第四个条目的情况下,我想将其粘贴到两个单独的位置。IE

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 grepping行,复制文件并拆分和awk选定的列(各个文件中的第一个和第二个位置)然后cat和sort他们。如果我在 R 中有更好的方法来做到这一点,那么我会喜欢一个指针。

4

1 回答 1

1

gregexpr 实际上返回一个长度为 1 的对象。如果你想找到匹配的行和不匹配的行,那么你需要查看返回的,而不是长度。匹配失败返回-1
尝试foo<-sapply(testdat$genome, function(x) gregexpr(',',x)); as.logical(foo)用逗号获取行。

于 2012-12-11T14:35:35.683 回答