如何将数据框列拆分为两列

How to split a dataframe column into two columns

我想了解如何将单个数据框列拆分为两列并将一个符号替换为另一个。例如,如果数据框 y 有;

X1
NA
1/0:0.82
1/1:1.995
0/1:1.146
NA
1/1:1.995

我希望能够像这样将数据分成两列,并将“/”符号替换为“.”。

X1 X2
NA
1.0 0.82
1.1 1.995
0.1 1.146
NA
1.1 1.995

每当我尝试使用 str.split 时,我都会让 运行 出错。任何帮助都会很棒。

编辑:

X1


不适用

1|0:0.82

1|1:1.995

0|1:1.146

不适用

1|1:1.995

如何将它分开 |X1|X2| |--|--| |不适用| |1/0|0.82| 等等

read.table(text=df$X1, sep=':', fill=T, h=F, dec = '/')
   V1    V2
1  NA      
2 1.0  0.82
3 1.1 1.995
4 0.1 1.146
5  NA      
6 1.1 1.995

如果您想要相应的列 data.types:

type.convert(read.table(text=df$X1, sep=':', fill=T, h=F, dec = '/'), as.is = TRUE)
   V1    V2
1  NA    NA
2 1.0 0.820
3 1.1 1.995
4 0.1 1.146
5  NA    NA
6 1.1 1.995

df <- structure(list(X1 = c(NA, "1/0:0.82", "1/1:1.995", "0/1:1.146", NA,
                 "1/1:1.995")), class = "data.frame", row.names = c(NA, -6L))

您可以使用 separate: 上的数据拆分为两列,并将第一列中的 / 替换为 .。使用来自@Onyambu 的数据 -

library(dplyr)
library(tidyr)

df <- df %>%
  separate(X1, c('X1', 'X2'), sep = ':') %>%
  mutate(X1 = sub('/', '.', X1)) %>%
  type.convert(as.is = TRUE)

df

#   X1    X2
#1  NA    NA
#2 1.0 0.820
#3 1.1 1.995
#4 0.1 1.146
#5  NA    NA
#6 1.1 1.995

使用strsplit

d$d
[1] NA          "1/0:0.82"  "1/1:1.995" "0/1:1.146" NA          "1/1:1.995"

data.frame( unname( t(data.frame( strsplit(sub("/",".",d$d), ":") )) ) )
    X1    X2
1 <NA>  <NA>
2  1.0  0.82
3  1.1 1.995
4  0.1 1.146
5 <NA>  <NA>
6  1.1 1.995

数据

d <- structure(list(d = c(NA, "1/0:0.82", "1/1:1.995", "0/1:1.146",
NA, "1/1:1.995")), class = "data.frame", row.names = c(NA, -6L
))

编辑,对于任何其他替代使用:

d$d
[1] NA          "1|0:0.82"  "1|1:1.995" "0|1:1.146" NA          "1|1:1.995"

data.frame( unname( t(data.frame( strsplit(sub("\|","/",d$d), ":") )) ) )
    X1    X2
1 <NA>  <NA>
2  1/0  0.82
3  1/1 1.995
4  0/1 1.146
5 <NA>  <NA>
6  1/1 1.995