gpt4 book ai didi

r - 将字符串数组转换为R中的数据帧

转载 作者:行者123 更新时间:2023-12-04 11:21:54 27 4
gpt4 key购买 nike

假设我有一个字符串数组,例如:

sa<-c("HLA:HLA00001 A*01:01:01:01 1098 bp",
"HLA:HLA01244 A*01:01:02 546 bp",
"HLA:HLA01971 A*01:01:03 895 bp")


我的问题是将其转换为如下数据帧的最佳方法是什么:

  Seq          Type             Length
1 HLA:HLA00001 A*01:01:01:01 1098 bp
2 HLA:HLA01244 A*01:01:02 546 bp
3 HLA:HLA01971 A*01:01:03 895 bp

最佳答案

使用‹dplyr›‹tidyr›包,这很简单:


将数据放入data_frame
separate列:




data_frame(sa) %>%
separate(sa, c('Seq', 'Type', 'Length'), sep = ' ', extra = 'drop', convert = TRUE)




Source: local data frame [3 x 3]

Seq Type Length
(chr) (chr) (int)
1 HLA:HLA00001 A*01:01:01:01 1098
2 HLA:HLA01244 A*01:01:02 546
3 HLA:HLA01971 A*01:01:03 895


这(有意地)从最后一列删除了单位,该单位现在是多余的(因为它将始终是相同的),并将其转换为整数。如果要保留它,请改用 extra = 'merge'

您可以通过应用另一个‹tidyr›函数来进一步分隔 Type列,该函数与 separate非常相似,但是指定要匹配的部分: extract。此功能允许您提供 regular expression(如果您还不知道的话,必须学习的工具!),它指定要匹配的文本部分。这些部分在括号中:

'(A\\*\\d{2}:\\d{2}):(.*)'


这意味着:提取两个组—第一个组包含字符串“ A*”,后跟两个数字“ :”和另外两个数字。第二组包含所有其余文本,在单独的“ :”之后(我希望我已正确捕获了HLA等位基因的规范,但我从未使用过此类数据)。

与上面的代码放在一起:

data_frame(sa) %>%
separate(sa, c('Seq', 'Type', 'Length'), sep = ' ', extra = 'drop', convert = TRUE) %>%
extract(Type, c('Group', 'Allele'), regex = '(A\\*\\d{2}:\\d{2}):(.*)')




Source: local data frame [3 x 4]

Seq Group Allele Length
(chr) (chr) (chr) (int)
1 HLA:HLA00001 A*01:01 01:01 1098
2 HLA:HLA01244 A*01:01 02 546
3 HLA:HLA01971 A*01:01 03 895

关于r - 将字符串数组转换为R中的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37999084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com