R 在第4列中分隔两个字母字符串

R 在第4列中分隔两个字母字符串,r,data-science,tidyr,R,Data Science,Tidyr,我有一个数据框-df-和基因组数据。最后一个col有两个字母的变体 id crm pos allele 160841 rs2237282 11 1273948 AG 160842 rs6417577 11 1276796 AC 165677 rs2151342 11 1199626 GT 165678 rs2749240 11 1258025 AG 我想把最后一行分成两行,每行一个字母

我有一个数据框-df-和基因组数据。最后一个col有两个字母的变体

               id crm     pos allele
160841  rs2237282  11 1273948     AG
160842  rs6417577  11 1276796     AC
165677  rs2151342  11 1199626     GT
165678  rs2749240  11 1258025     AG
我想把最后一行分成两行,每行一个字母

               id crm     pos allele allele2
160841  rs2237282  11 1273948     A       G
160842  rs6417577  11 1276796     A       C
165677  rs2151342  11 1199626     G       T
165678  rs2749240  11 1258025     A       G
我使用dplyr和tidyr在RStudio 1.1.419、R3.4.3中进行了尝试,但没有成功:

  • 分离(df,等位基因,分为=c(“等位基因”,“等位基因2”))
  • 分离(df,等位基因,into=c(“等位基因”,“等位基因2”),sep=“”)
  • 分离(df,等位基因,分为=c(“等位基因”,“等位基因2”),sep=“\c”)
  • 分离(df,等位基因,分为=c(“等位基因”,“等位基因2”),sep=“.”)
  • 分离(df,等位基因,分为=c(“等位基因”,“等位基因2”),sep=)
  • 分离(df,等位基因,分为=c(“等位基因”,“等位基因2”),sep=\c)
如何得到所需的分割?

使用基本r:

HERE=data.frame(A1=character(),A2=character())
cbind(data,strcapture("(.)(.)",data$allele,HERE))
              id crm     pos allele A1 A2
160841 rs2237282  11 1273948     AG  A  G
160842 rs6417577  11 1276796     AC  A  C
165677 rs2151342  11 1199626     GT  G  T
165678 rs2749240  11 1258025     AG  A  G

sep
中,
sep
参数可以是数字,表示要拆分的字符位置,因此:

separate(df, allele, into = c("allele1", "allele2"), sep = 1)
给予:

              id crm     pos allele1 allele2
160841 rs2237282  11 1273948       A       G
160842 rs6417577  11 1276796       A       C
165677 rs2151342  11 1199626       G       T
165678 rs2749240  11 1258025       A       G

除了
分离
提取
是软件包中的另一个选项。这可以通过在
regex
参数中指定捕获组来实现

library(tidyr)

df %>%
  extract(allele, into = c("allele1", "allele2"), regex = "([ATCG])([ATCG])")
#               id crm     pos allele1 allele2
# 160841 rs2237282  11 1273948       A       G
# 160842 rs6417577  11 1276796       A       C
# 165677 rs2151342  11 1199626       G       T
# 165678 rs2749240  11 1258025       A       G
library(tidyr)

df %>%
  extract(allele, into = c("allele1", "allele2"), regex = "([ATCG])([ATCG])")
#               id crm     pos allele1 allele2
# 160841 rs2237282  11 1273948       A       G
# 160842 rs6417577  11 1276796       A       C
# 165677 rs2151342  11 1199626       G       T
# 165678 rs2749240  11 1258025       A       G