r语言 - 将一列拆分为两列,如果没有两个值,则保留原始值



我的数据框架中有一列包含特定基因位置。它要么只有一个位置(如果是SNP(,要么有一个位置范围(如果是删除、重复(。

我想将Gene_Locations列拆分为两列:Start_Position和Stop Position。如果它有一个范围,这很容易做到。但如果只有一个值,我希望它在Gene_Location列中,在Start_position和Stop_position列中都保留原始值。第二位并不容易做到,因为它不断出现NA或空白空白。如果能在这方面得到帮助,我将不胜感激。

这是我期望的专栏:

123457
GeneLocation Start_Position Stop_Position
12346 23456 13456
123456-123457 123456
12345-122346 122345 122346
134567 134567
12346 23456 13456

这是dplyr::coalesce的一个很好的用例,它(类似于它命名的SQL函数(从一组向量中返回第一个非NA元素。

library(dplyr)
library(tidyr)
data %>% 
separate(GeneLocation, c('Start_Position', 'Stop_Position')) %>%
mutate(Stop_Position = coalesce(Stop_Position, Start_Position))

coalesce非常适合这个用例!这是一个带有ifelse语句的解决方案。

library(dplyr)
library(tidyr)
df %>% 
separate(GeneLocation, into = c("Start_Position", "Stop_Position"), sep = " - ", remove = FALSE) %>% 
mutate(Stop_Position = ifelse(is.na(Stop_Position), Start_Position, Stop_Position))
GeneLocation Start_Position Stop_Position
1          123456         123456        123456
2 123456 - 123457         123456        123457
3 122345 - 122346         122345        122346
4          134567         134567        134567
5          123456         123456        123456

相关内容

  • 没有找到相关文章

最新更新