如何将数据框列拆分为两列
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
我想了解如何将单个数据框列拆分为两列并将一个符号替换为另一个。例如,如果数据框 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